小游戏——飞机大战java实现

话不多说,先来看看效果图
在这里插入图片描述
在这里插入图片描述
这个java实现的飞机大战小游戏可以用鼠标控制飞机的移动也可以使用键盘控制上下左右
在不同的分数段,飞机的子弹也不一样,不过击杀每个飞机的分数是一样,你可以自己修改每个飞机的分数
如果只想要素材,不要代码的可以到这里去拿:https://download.csdn.net/download/liang13654/12609460

我使用的是IDEA软件,你需要在src下新建两个包,img和ui(当然,这两个包的名字可以随便命名),然后把素材放到img里
接下来就是部分代码了
peizhi.java

package ui;

import java.awt.image.BufferedImage;

public class peizhi {
   
    //窗口名字
    public static String NAME= "飞机大战";
    //背景图片路径
    public static String  img="/img/bg1.jpg";
    //我方飞机图片路径
    public static String  img2="/img/wo.png";
    //敌方飞机图片路径1
    public static String  di1="/img/di1.png";
    //敌方飞机图片路径2
    public static String  di2="/img/di2.png";
    //我方飞机子弹图片路径1
    public static String  zi="/img/wozi.png";
    //爆炸效果的图片路径1
    public static String  bao="/img/bao.png";
    //爆炸效果的音效路径1
    //public static String  bomb="/src/img/bomb.wav";
    //窗口宽度
    public static int Width=600;
    //窗口高度
    public static int Height=800;
}

在paizhi有爆炸效果图以及音效,不过我没有搞这个,如果有兴趣的话你们可以搞搞
Hero.java`

package ui;

import java.awt.image.BufferedImage;

//我方飞机
public class Hero extends Fly{
   
    int hp;
    public Hero(){
   
        //确定游戏开始时,显示我方飞机的图片
        img=App.getImge(peizhi.img2);
        //确定我方飞机的大小
        w=img.getWidth();
        h=img.getHeight();
        //确定我方飞机在游戏开始时的位置
        x=(peizhi.Width-w)/2;
        y=peizhi.Height-h*2;
        //游戏开始时我方飞机的血量
        hp=3;
    }
    //让飞机移动到鼠标位置上的方法
    public void moveToMouse(int mx,int my){
   
        x=mx-w/2;
        y=my-h/2+10;
    }
    //上
    public void moveUp(){
   
        y-=10;
        if(y<0){
   
            y=0;
        }
    }
    //下
    public void moveDown(){
   
        y+=10;
        if(y>(peizhi.Height-h*3/2)){
   
            y=peizhi.Height-h*3/2;
        }
    }
    //左
    public void moveLeft(){
   
        x-=10;
        if(x<0){
   
            x=0;
        }
    }
    //右
    public void moveRight(){
   
        x+=10;
        if(x>(peizhi.Width-w-15)){
   
            x=peizhi.Width-w-15;
        }
    }
}

Ep.java

package ui;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Ep extends Fly {
   
    //敌机速度
    int sp;
    int hp;
    //构造器:给敌机定型
    public Ep(){
   
        //定义随机数
        Random rd=new Random();
        //生成随机数来选取图片
        int index=rd.nextInt(4)+1;
        hp=index;
        //确定敌机显示的图片
        img=App.getImge("/img/di"+index+".png");
        //确定敌机的大小
        w=img.getWidth();
        h=img.getHeight();
        //确定敌机的位置
        x=rd.nextInt
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
飞机大战游戏中,血量和胜负是非常重要的元素。我们可以通过以下步骤来实现它们: 1. 定义玩家飞机和敌机的血量属性,可以将其定义为成员变量。 2. 在玩家飞机和敌机被击中时,减少对应的血量。 3. 当玩家飞机或敌机的血量为0时,判断游戏胜负。 4. 在游戏结束时,显示胜负信息并提示是否重新开始游戏。 下面是具体的实现步骤: 1. 定义玩家飞机和敌机的血量属性 在Plane类中添加以下成员变量: ```java private int hp; // 飞机血量 ``` 在EnemyPlane类和PlayerPlane类中分别初始化血量: ```java public class EnemyPlane extends Plane { // 构造方法 public EnemyPlane(int x, int y, BufferedImage image) { super(x, y, image); this.hp = 3; // 初始化敌机血量为3 } } public class PlayerPlane extends Plane { // 构造方法 public PlayerPlane(int x, int y, BufferedImage image) { super(x, y, image); this.hp = 5; // 初始化玩家飞机血量为5 } } ``` 2. 减少血量 在Plane类中添加以下方法: ```java public void decreaseHp() { hp--; // 血量减1 } ``` 在Bullet类中,击中敌机时调用敌机的decreaseHp()方法: ```java public void hitEnemy(EnemyPlane enemy) { enemy.decreaseHp(); // 减少敌机血量 // 判断敌机是否被击败 if (enemy.getHp() == 0) { enemy.setAlive(false); // 敌机死亡 score += 10; // 得分加10分 } } ``` 在GameFrame类的paint()方法中,绘制玩家飞机和敌机的血条: ```java // 绘制玩家飞机血条 g.setColor(Color.RED); g.fillRect(20, 30, playerPlane.getHp() * 20, 10); // 绘制敌机血条 for (EnemyPlane enemy : enemies) { if (enemy.isAlive()) { // 只绘制存活的敌机血条 g.setColor(Color.RED); g.fillRect(enemy.getX(), enemy.getY() - 10, enemy.getHp() * 20, 5); } } ``` 3. 判断游戏胜负 在GameFrame类中添加以下方法: ```java // 判断游戏是否结束 public boolean isGameOver() { // 玩家飞机血量为0,游戏失败 if (playerPlane.getHp() == 0) { return true; } // 所有敌机均被击败,游戏胜利 for (EnemyPlane enemy : enemies) { if (enemy.isAlive()) { return false; // 还有存活的敌机,游戏继续 } } return true; // 没有存活的敌机,游戏胜利 } ``` 在GameFrame类的run()方法中,判断游戏是否结束: ```java // 游戏主循环 public void run() { while (true) { // 更新游戏状态 update(); // 绘制游戏界面 repaint(); // 线程休眠 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } // 判断游戏是否结束 if (isGameOver()) { // 显示游戏结束信息 String message; if (playerPlane.getHp() == 0) { message = "Game Over! You Lose!"; } else { message = "Game Over! You Win! Score: " + score; } int option = JOptionPane.showConfirmDialog(this, message + " Restart?", "Game Over", JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { restart(); // 重新开始游戏 } else { System.exit(0); // 退出游戏 } } } } ``` 4. 显示胜负信息并提示是否重新开始游戏 在游戏结束时,使用JOptionPane显示游戏胜负信息,并提示是否重新开始游戏。如果玩家选择重新开始游戏,则调用restart()方法重新初始化游戏状态。 ```java // 显示游戏结束信息 String message; if (playerPlane.getHp() == 0) { message = "Game Over! You Lose!"; } else { message = "Game Over! You Win! Score: " + score; } int option = JOptionPane.showConfirmDialog(this, message + " Restart?", "Game Over", JOptionPane.YES_NO_OPTION); if (option == JOptionPane.YES_OPTION) { restart(); // 重新开始游戏 } else { System.exit(0); // 退出游戏 } ``` 至此,我们已经成功地实现飞机大战游戏中的血量和胜负功能,玩家可以享受更加丰富的游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值