【java课程设计】 实现飞机大战小游戏设计_飞机大战java课程设计

public class GamePanel extends JPanel {
private Player player;
private Enemy enemy;
private Bullet bullet;
private Timer timer;
private int score;
private boolean gameOver;

public GamePanel() {
    player = new Player(100, 450);
    enemy = new Enemy();
    bullet = new Bullet();
    timer = new Timer(10, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (gameOver) {
                timer.stop();
            } else {
                update();
                repaint();
            }
        }
    });
    timer.start();
    addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            bullet.setX(e.getX());
            bullet.setY(e.getY());
            bullet.setVelocity(5);
        }
    });
}

``3. 在GamePanel类中继续添加以下代码,以实现游戏逻辑和绘制功能。

public void update() {
    if (bullet.getY() < 600) {
        bullet.setY(bullet.getY() + bullet.getVelocity());
    } else {
        bullet.setAlive(false);
    }
    if (player.getY() > 600) {
        player.setAlive(false);
        gameOver = true;
        timer.stop();
    }
    if (enemy.getY() > 600) {
        enemy.setAlive(false);
    }
    if (!bullet.isAlive() && enemy.isAlive()) {
        score++;
        enemy.setAlive(false);
    }
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    player.draw(g);
    enemy.draw(g);
    bullet.draw(g);
    g.setFont(new Font("Arial", Font.BOLD, 30));
    g.setColor(Color.RED);
    g.drawString("Score: " + score, 10, 50);
    if (gameOver) {
        g.setColor(Color.RED);
        g.setFont(new Font("Arial", Font.BOLD, 40));
        g.drawString("Game Over!", 100, 200);
        g.drawString("Press space to play again.", 100, 250);
    }
}

  1. 在GamePanel类中添加以下代码,以实现游戏结束时的重新开始功能。
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK\_SPACE) {
        player.setAlive(true);
        enemy.setAlive(true);
        bullet.setAlive(false);
        gameOver = false;
        timer.start();
    }
}

`5. 在GamePanel类中添加以下代码,以实现游戏窗口的关闭功能。

public void windowClosing(WindowEvent e) {
    System.exit(0);
}

  1. 在GameFrame类中添加以下代码,以实现游戏窗口的创建和显示。
public GameFrame() {
    gamePanel = new GamePanel();
    this.add(gamePanel);
    this.setTitle("飞机大战");
    this.setSize(800, 600);
    this.setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
    this.setVisible(true);
    this.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

  1. 在GamePanel类中添加以下代码,以实现敌机的生成和移动功能。
public void addEnemy() {
    Enemy enemy = new Enemy();
    enemy.setX(rand.nextInt(700));
    enemy.setY(rand.nextInt(50) + 100);
    enemy.setSpeed(rand.nextInt(5) + 2);
    enemies.add(enemy);
}

public void moveEnemies() {
    for (Enemy enemy : enemies) {
        enemy.setY(enemy.getY() + enemy.getSpeed());
        if (enemy.getY() > 600) {
            enemy.setAlive(false);
        }
    }
}

  1. 在GamePanel类中添加以下代码,以实现敌机的绘制功能。
public void drawEnemies(Graphics g) {
    for (Enemy enemy : enemies) {
        enemy.draw(g);
    }
}

  1. 在GamePanel类中添加以下代码,以实现敌机的数量控制和生成功能。
private ArrayList<Enemy> enemies = new ArrayList<Enemy>();
private Random rand = new Random();

public void addEnemies() {


# 如何快速更新自己的技术积累?

*   在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
*   如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
*   知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
*   学习以后不知道有没有学成,则可以通过面试去检验。

**我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!**

**以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目**

![八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享](https://img-blog.csdnimg.cn/img_convert/3920e826ca2f878c3042b8fa135dc265.webp?x-oss-process=image/format,png)

![八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享](https://img-blog.csdnimg.cn/img_convert/365fd8536fa6340d4e8af34a3b0efac7.webp?x-oss-process=image/format,png)



灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!**

**以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目**

[外链图片转存中...(img-7w2NOIZN-1714511541057)]

[外链图片转存中...(img-xaMXDeWD-1714511541058)]



> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值