📄 airfighting.java
字号:
package airplane;
import java.awt.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
public class AirFighting extends Applet implements Runnable{
int AppletWidth, AppletHeight;
int bkImageWidth, bkImageHeight;
int myPlaneWidth, myPlaneHeight;
int enemyPlaneWidth, enemyPlaneHeight;
int myMissleWidth, myMissleHeight;
int enemyMissleWidth, enemyMissleHeight;
int enemyPlaneX, enemyPlaneY, myPlaneX, myPlaneY;
int myPlaneDirection;
boolean canMoveMyPlane = false;
Image bkg,bufferImage;
Image enemyPlane, myPlane;
Image enemyMissle, myMissle;
Image cloudImg1, cloudImg2, cloudImg3, cloudImg4;
Image explImg[];
Image explSourceImage;
Random R;
Thread newThread;
Graphics bufferGraphic;
MediaTracker MT;
private final int ENEMYNUM = 5;
SuperSprite myPlaneSprite, myMissleSprite;
Cloud cloudSprite1, cloudSprite2, cloudSprite3, cloudSprite4;
Explosion explosionSprite;
EnemyPlane[] enemyPlaneSprite = new EnemyPlane[ENEMYNUM];
EnemyMissle[] enemyMissleSprite = new EnemyMissle[ENEMYNUM];;
private AudioClip audioMissle,audioBackMusic, audioGameOver;
public void init() {
int randEpX = 0, randEpY = 0; //敌人飞机的随机位置
int cldX;
this.addKeyListener(new keyAction());
MT = new MediaTracker(this);
R = new Random();
audioBackMusic = getAudioClip(getDocumentBase(), "Audio/Music.mid");
audioMissle = getAudioClip(getDocumentBase(), "Audio/Explosion.wav");
audioGameOver = getAudioClip(getDocumentBase(), "Audio/GameOver.wav");
explSourceImage = getImage(getDocumentBase(), "Images/explosion.gif");
bkg = getImage(getDocumentBase(), "Images/bluesky.jpg");
myPlane = getImage(getDocumentBase(), "Images/avion.gif");
myMissle = getImage(getDocumentBase(), "Images/missle.gif");
enemyPlane = getImage(getDocumentBase(), "Images/plane.gif");
enemyMissle = getImage(getDocumentBase(), "Images/bullet.gif");
cloudImg1 = getImage(getDocumentBase(), "Images/cloud1.gif");
cloudImg2 = getImage(getDocumentBase(), "Images/cloud2.gif");
cloudImg3 = getImage(getDocumentBase(), "Images/cloud3.gif");
cloudImg4 = getImage(getDocumentBase(), "Images/cloud4.gif");
MT.addImage(bkg, 0);
MT.addImage(explSourceImage,0);
MT.addImage(myPlane, 0);
MT.addImage(enemyPlane, 0);
MT.addImage(enemyMissle, 0);
MT.addImage(myMissle, 0);
MT.addImage(cloudImg1, 0);
MT.addImage(cloudImg2, 0);
MT.addImage(cloudImg3, 0);
MT.addImage(cloudImg4, 0);
try {
MT.waitForAll();
} catch (InterruptedException E) {}
///////////////////////////////////////////////////////////////////////
explImg = ImageCut.getImages(explSourceImage, 8, 34, 33);
for (int i = 0; i < explImg.length; i++) {
MT.addImage(explImg[i], 0);
}
try {
MT.waitForAll();
} catch (InterruptedException E) {}
explosionSprite = new Explosion(explImg,this);
// for (int i = 0; i < explImg.length; i++) {
// System.out.println(explImg[i]);
// }
///////////////////////////////////////////////////////////////////////
bkImageWidth = bkg.getWidth(this);
bkImageHeight = bkg.getHeight(this);
myPlaneWidth = myPlane.getWidth(this);
myPlaneHeight = myPlane.getHeight(this);
enemyPlaneWidth = enemyPlane.getWidth(this);
enemyPlaneHeight = enemyPlane.getHeight(this);
enemyMissleWidth = enemyMissle.getWidth(this);
enemyMissleHeight = enemyMissle.getHeight(this);
myMissleWidth = myMissle.getWidth(this);
myMissleHeight = myMissle.getHeight(this);
AppletWidth = bkImageWidth;
AppletHeight = bkImageHeight;
myPlaneX = 0;
myPlaneY = AppletHeight/2;
myPlaneSprite = new SuperSprite(myPlane, myPlaneX, myPlaneY,this);
myPlaneSprite.setVisible(true);
for(int i=0; i<enemyPlaneSprite.length; i++){
int tx,ty;
tx = randEpY;
ty = randEpX;
//保证飞机不重叠///////////////////////////////////////
do{
randEpY = R.nextInt()%(AppletHeight - enemyPlaneWidth);
}while((java.lang.Math.abs(ty-randEpY))< (enemyPlaneHeight));
do{
randEpX = R.nextInt()%(AppletWidth/2);
}while((java.lang.Math.abs(tx-randEpX))< (enemyPlaneWidth));
//////////////////////////////////////////////////////
enemyPlaneSprite[i] = new EnemyPlane(enemyPlane,
randEpX,randEpY,this,
AppletWidth, AppletHeight);
enemyMissleSprite[i] = new EnemyMissle(enemyMissle,enemyPlaneSprite[i],this,
AppletWidth,AppletHeight);
}
myMissleSprite = new MyMissle(myMissle,
myPlaneWidth-myMissleWidth/2,
myPlaneHeight-myMissleHeight,
this,
AppletWidth,
AppletHeight);
do{
cldX = R.nextInt()%(AppletWidth-cloudImg1.getWidth(this));
}while(cldX<0);
cloudSprite1 = new Cloud(cloudImg1,
cldX, AppletHeight/2,
1, this,
AppletWidth, AppletHeight);
do{
cldX = R.nextInt()%(AppletWidth-cloudImg2.getWidth(this));
}while(cldX<0);
cloudSprite2 = new Cloud(cloudImg2,
cldX,AppletHeight/4,
0,this,
AppletWidth,AppletHeight);
do{
cldX = R.nextInt()%(AppletWidth-cloudImg3.getWidth(this));
}while(cldX<0);
cloudSprite3 = new Cloud(cloudImg3,
cldX,AppletHeight/2-100,
1,this,
AppletWidth, AppletHeight);
do{
cldX = R.nextInt()%(AppletWidth-cloudImg4.getWidth(this));
}while(cldX<0);
cloudSprite4 = new Cloud(cloudImg4,
cldX, AppletHeight/2,
0,this,
AppletWidth, AppletHeight);
//建立次画面
bufferImage = createImage(AppletWidth, AppletHeight);
bufferGraphic = bufferImage.getGraphics();
this.setFocusable(true) ;
this.resize(AppletWidth,AppletHeight);
//audioBackMusic.loop();
}
public void start() { //start()方法
newThread = new Thread(this); //建立与启动新线程
newThread.start();
}
public void stop() { //stop()方法
newThread = null; //将线程设为null
}
public void paint(Graphics g) {
//只清除此部分区域的图像
bufferGraphic.clearRect(0, 0, AppletWidth, AppletHeight);
//注意绘制顺序(Z-Order)
bufferGraphic.drawImage(bkg, 0, 0, this);
cloudSprite1.paintSprite(bufferGraphic);
cloudSprite2.paintSprite(bufferGraphic);
cloudSprite3.paintSprite(bufferGraphic);
cloudSprite4.paintSprite(bufferGraphic);
myPlaneSprite.paintSprite(bufferGraphic);
myMissleSprite.paintSprite(bufferGraphic);
for(int i=0; i<enemyPlaneSprite.length; i++){
enemyPlaneSprite[i].paintSprite(bufferGraphic);
enemyMissleSprite[i].paintSprite(bufferGraphic);
}
explosionSprite.paintSprite(bufferGraphic);
//将次画面贴到主画面上
g.drawImage(bufferImage, 0, 0, this);
}
public void update(Graphics g) { //update()方法
paint(g); //只单纯调用paint()方法
}
public void run() {
while (newThread!=null) {
repaint(); //重绘图像
try {
Thread.sleep(30);
} catch (InterruptedException E) {}
myMissleSprite.updateState(); //更新我方子弹状态
setAirplaneLocation(myPlaneDirection);//更新我方飞机状态
explosionSprite.updateState();
for (int i = 0; i < enemyPlaneSprite.length; i++) {
enemyPlaneSprite[i].updateState();
enemyMissleSprite[i].updateState();
this.showStatus("enemyPlaneSprite:"+enemyPlaneSprite[i].getX()+":"+enemyPlaneSprite[i].getY()+
" enemyMissle: "+enemyMissleSprite[i].getX()+":"+enemyMissleSprite[i].getY()+
" myPlane: "+myPlaneSprite.getX()+":"+myPlaneSprite.getY() +
" myMissle: "+myMissleSprite.getX()+":"+myMissleSprite.getY());
////////////////////////////////////////////////////////////////
if (myMissleSprite.visible == true) {
if (enemyPlaneSprite[i].isCollide(myMissleSprite)) {
explosionSprite.setLocation(enemyPlaneSprite[i].getX(),enemyPlaneSprite[i].getY());
explosionSprite.setVisible(true);
audioMissle.play();
enemyPlaneSprite[i].setVisible(false);
enemyPlaneSprite[i].active = false;
}
}
if (enemyMissleSprite[i].isCollide(myMissleSprite)) {
explosionSprite.setLocation(enemyMissleSprite[i].getX(),enemyMissleSprite[i].getY());
explosionSprite.setVisible(true);
audioMissle.play();
enemyMissleSprite[i].setVisible(false);
enemyMissleSprite[i].active = false;
}
if (myPlaneSprite.isCollide(enemyPlaneSprite[i])) {
explosionSprite.setLocation(enemyPlaneSprite[i].getX(),enemyPlaneSprite[i].getY());
explosionSprite.setVisible(true);
audioMissle.play();
enemyPlaneSprite[i].setVisible(false);
enemyPlaneSprite[i].active = false;
}
if (myPlaneSprite.isCollide(enemyMissleSprite[i])) {
explosionSprite.setLocation(enemyMissleSprite[i].getX(),enemyMissleSprite[i].getY());
explosionSprite.setVisible(true);
audioMissle.play();
enemyMissleSprite[i].setVisible(false);
enemyMissleSprite[i].active = false;
}
}
}
}
//direction : 0=左; 1=右; 2=上; 3=下;
public void setAirplaneLocation(int direction){
//移动飞机
if(canMoveMyPlane == true){
switch (direction) {
case 0: //左
//设定飞机的边界动作
if (myPlaneX <= 0)
myPlaneX = 0;
else
myPlaneX = myPlaneSprite.getX() - 8;
break;
case 1:
//设定飞机的边界动作
if (myPlaneX >= AppletWidth - myPlaneWidth)
myPlaneX = AppletWidth - myPlaneWidth;
else
myPlaneX = myPlaneSprite.getX() + 8;
break;
case 2:
if (myPlaneY <= 0)
myPlaneY = 0;
else
myPlaneY = myPlaneSprite.getY() - 8;
break;
case 3:
if (myPlaneY >= AppletHeight - myPlaneHeight)
myPlaneY = AppletHeight - myPlaneHeight;
else
myPlaneY = myPlaneSprite.getY() + 8;
break;
}
//设定飞机图像的正确位置
myPlaneSprite.setLocation(myPlaneX, myPlaneY);
}
}
//=======================================================================
class keyAction extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == e.VK_SPACE) {
//发射子弹
if (myMissleSprite.canVisible() == false &&
myMissleSprite.canMove() == false) {
myMissleSprite.setLocation((myPlaneX + myPlaneWidth-myMissleWidth/2),
(myPlaneY + myPlaneHeight-myMissleHeight));
myMissleSprite.setVisible(true);
myMissleSprite.setMove(true);
}
}
if(e.getKeyCode() == e.VK_LEFT){
myPlaneDirection = 0;
canMoveMyPlane = true;
}
if(e.getKeyCode() == e.VK_RIGHT){
myPlaneDirection = 1;
canMoveMyPlane = true;
}
if(e.getKeyCode() == e.VK_UP){
myPlaneDirection = 2;
canMoveMyPlane = true;
}
if(e.getKeyCode() == e.VK_DOWN){
myPlaneDirection = 3;
canMoveMyPlane = true;
}
}
public void keyReleased(KeyEvent e) {
canMoveMyPlane = false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -