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);
}
}
- 在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);
}
- 在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);
}
});
}
- 在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);
}
}
}
- 在GamePanel类中添加以下代码,以实现敌机的绘制功能。
public void drawEnemies(Graphics g) {
for (Enemy enemy : enemies) {
enemy.draw(g);
}
}
- 在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)收录**