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

飞机大战是一个非常经典的游戏,相信很多人都玩过。下面我们将通过Java代码来实现一个简单的飞机大战游戏。

首先,我们需要搭建游戏引擎。这里我们使用Java Swing来创建GUI界面,使用Java线程来实现游戏逻辑。

  1. 创建一个Java项目,并将下面的代码复制到新建的Java文件中。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class GameFrame extends JFrame implements ActionListener {
    private GamePanel gamePanel;

    public GameFrame() {
        gamePanel = new GamePanel();
        this.add(gamePanel);
        this.setTitle("飞机大战");
        this.setSize(800, 600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        gamePanel.repaint();
    }
}
  1. 创建一个名为GamePanel的Java类,并将下面的代码复制到新建的Java文件中。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

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类中继续添加以下代码,以实现游戏逻辑和绘制功能。


```java
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() {
    if (enemies.size() < 15) {
        addEnemy();
    } else {
        enemies.remove(0);
        addEnemy();
    }
}
  1. 在GamePanel类中添加以下代码,以实现敌机的移动和绘制功能。
public void moveEnemies() {
    for (Enemy enemy : enemies) {
        enemy.setY(enemy.getY() + enemy.getSpeed());
        if (enemy.getY() > 600) {
            enemy.setAlive(false);
        } else {
            enemy.draw(getGraphics());
        }
    }
}
  1. 在GamePanel类中添加以下代码,以实现敌机被击落后得分的变化。
public void enemyShotDown(Bullet bullet) {
    for (Enemy enemy : enemies) {
        if (bullet.getX() < enemy.getX() + 50 && bullet.getX() > enemy.getX() - 50 && bullet.getY() < enemy.getY() + 50 && bullet.getY() > enemy.getY() - 50) {
            enemies.remove(enemy);
            score++;
            break;
        }
    }
}
  1. 在GamePanel类中添加以下代码,以实现游戏窗口的创建和显示。
public static void main(String[] args) {
    GameFrame gameFrame = new GameFrame();
}

至此,我们已经完成了一个简单的2D飞机大战敌机的游戏程序。你可以运行该程序进行测试,检查是否实现了预期的功能。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西江茶客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值