⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 airfighting.java

📁 java 写的飞行射击游戏。是游戏的基础。可以参考一下。对游戏开发有帮助。
💻 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 + -