21xrx.com
2025-04-03 02:48:15 Thursday
文章检索 我的文章 写文章
《Java简易小游戏:打飞机》 - 开发思路与代码实现
2023-06-18 15:21:52 深夜i     --     --
Java编程 小游戏开发 Swing工具包

对于Java程序员来说,编写一款小游戏是一种非常有趣的挑战。在这篇文章中,我们将探讨一种简单的Java游戏开发思路,并用实际代码实现这个游戏 - 打飞机。

##### 游戏规则

这个游戏的规则很简单,玩家通过控制一架飞机来射击从上方飞来的敌机。如果敌机被击中,就会消失,否则,游戏结束。

##### 开发思路

为了开发这个游戏,我们需要Java的图形用户界面(GUI)工具包,通常来说,Java Swing就是最好的选择。所以,在本次示例中,我们将使用Java Swing来创建游戏的用户界面。

具体来说,我们将为游戏中的各个游戏元素创建Java类,包括玩家飞机、敌机和子弹等。我们还将使用Swing的Timer类来定期执行游戏逻辑更新,从而实现游戏的动态效果。

##### 代码实现

上面我们已经讨论了我们的游戏开发思路。现在让我们看看游戏的实际代码。

import javax.swing.*;
public class GameFrame extends JFrame {
  public GameFrame() {
    initUI();
  }
  private void initUI() {
    add(new GameBoard());
    setTitle("Java Game");
    setSize(400, 300);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
      GameFrame game = new GameFrame();
      game.setVisible(true);
    });
  }
}

我们首先创建了一个JFrame以容纳整个游戏。然后我们在其中添加一个GameBoard对象 - 这是一个继承了JPanel的自定义类,它包含了所有的游戏元素和游戏逻辑。接下来我们设置了游戏窗口的标题、大小和关闭模式。

在main()函数中,我们异步地创建了一个GameFrame对象,并将其设置为可见状态。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class GameBoard extends JPanel implements ActionListener {
  private Timer timer;
  private Player player;
  private Set
  enemies;
 
  private boolean isGameOver;
  public GameBoard() {
    initBoard();
  }
  private void initBoard() {
    setPreferredSize(new Dimension(400, 300));
    setBackground(Color.BLACK);
    setFocusable(true);
    player = new Player();
    player.init();
    enemies = new HashSet<>();
    for (int i = 0; i < 10; i++) {
      Enemy enemy = new Enemy();
      enemy.init();
      enemies.add(enemy);
    }
    timer = new Timer(50, this);
    timer.start();
    addKeyListener(new GameKeyAdapter());
  }
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    player.draw(g);
    for (Enemy enemy : enemies) {
      enemy.draw(g);
    }
  }
  @Override
  public void actionPerformed(ActionEvent e) {
    if (isGameOver)
      return;
    
    for (Enemy enemy : enemies) {
      enemy.move();
    }
    player.move();
    checkCollisions();
    repaint();
  }
  private void checkCollisions() {
    Rectangle playerRect = player.getBounds();
    for (Enemy enemy : enemies) {
      Rectangle enemyRect = enemy.getBounds();
      if (playerRect.intersects(enemyRect))
        isGameOver = true;
        return;
      
    }
  }
  private class GameKeyAdapter extends KeyAdapter {
    @Override
    public void keyPressed(KeyEvent e) {
      player.keyPressed(e);
    }
    @Override
    public void keyReleased(KeyEvent e) {
      player.keyReleased(e);
    }
  }
}

在这里,我们创建了GameBoard类,它是继承了JPanel并实现了ActionListener接口的自定义类。该类包含了所有的游戏逻辑和元素。在initBoard()函数中,我们初始化了游戏窗口的参数,并在其中创建了玩家对象和10个敌人对象,并将它们存储在一个Set中。我们还创建了一个计时器对象,每50毫秒触发一次ActionEvent事件。我们还添加了一个键盘事件监听器,以便玩家可以控制飞机。

在paintComponent()函数中,我们绘制了玩家和所有敌人。

在actionPerformed()函数中,我们每隔50毫秒就触发一次,用于更新游戏逻辑。我们移动了所有的敌人和玩家,并检查是否有发生碰撞。如果玩家已经与任何敌人发生碰撞,我们就将游戏结束的标志设置为true,从而停止游戏更新。

最后,在GameKeyAdapter类中,我们实现了键盘事件监听器,以便玩家可以使用箭头键控制飞机。

##### 结语

到此为止,我们已经实现了Java的一个简单游戏,打飞机。这个游戏不仅演示了Java Swing图形用户界面的使用,还展示了面向对象编程的技巧和游戏逻辑的设计。

  
  

评论区