21xrx.com
2024-11-05 18:49:06 Tuesday
登录
文章检索 我的文章 写文章
《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图形用户界面的使用,还展示了面向对象编程的技巧和游戏逻辑的设计。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复