Java 飞机小游戏开发教程

引言

它是一种广受欢迎的娱乐形式,在业余时间学习游戏开发不仅能激发创造力,还能提高编程能力。本文将通过一个简单的 Java 飞机小游戏代码示例,带您走进游戏开发的世界。

游戏概述

在这个小游戏中,玩家将操控一架飞机,躲避敌机并尽可能多地获取积分。游戏使用 Java Swing 库进行图形界面开发,并通过简单的逻辑实现碰撞检测。

游戏开发步骤

1. 设置开发环境

确保您已安装 Java 开发工具包 (JDK) 和集成开发环境 (IDE),如 IntelliJ IDEA 或 Eclipse。

2. 创建项目结构

项目主要由以下部分组成:

  • Main.java - 主程序
  • Player.java - 玩家飞机类
  • Enemy.java - 敌方飞机类
  • GamePanel.java - 游戏面板主类

3. 编写代码

下面是各个类的简单代码实现。

3.1 Main.java
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame("飞机大战游戏");
        GamePanel panel = new GamePanel();
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        panel.startGame();
    }
}
3.2 Player.java
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;

public class Player {
    private int x, y;
    private Image image;

    public Player() {
        this.x = 400;
        this.y = 500;
        this.image = new ImageIcon("player.png").getImage();
    }

    public void move(int dx) {
        this.x += dx;
        if (this.x < 0) this.x = 0;
        if (this.x > 800 - image.getWidth(null)) this.x = 800 - image.getWidth(null);
    }

    public void draw(Graphics g) {
        g.drawImage(image, x, y, null);
    }
}
3.3 Enemy.java
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;

public class Enemy {
    private int x, y;
    private Image image;

    public Enemy(int x, int y) {
        this.x = x;
        this.y = y;
        this.image = new ImageIcon("enemy.png").getImage();
    }

    public void move() {
        this.y += 5;  // 敌机向下移动
    }

    public void draw(Graphics g) {
        g.drawImage(image, x, y, null);
    }
}
3.4 GamePanel.java
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

public class GamePanel extends JPanel implements ActionListener {
    private Player player;
    private ArrayList<Enemy> enemies;
    private Timer timer;

    public GamePanel() {
        player = new Player();
        enemies = new ArrayList<>();
        timer = new Timer(30, this);
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) player.move(-10);
                if (e.getKeyCode() == KeyEvent.VK_RIGHT) player.move(10);
            }
        });
        setFocusable(true);
    }

    public void startGame() {
        timer.start();
        // 每隔一段时间生成敌机
        new Timer(1000, e -> enemies.add(new Enemy((int)(Math.random() * 750), 0))).start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        player.draw(g);
        for (Enemy enemy : enemies) {
            enemy.move();
            enemy.draw(g);
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();
    }
}

4. 游戏状态图

在游戏中,不同的状态如启动、进行中和结束是非常重要的。以下是简单的状态图,用于展示游戏的主要状态:

stateDiagram
    [*] --> 开始
    开始 --> 进行中
    进行中 --> 结束
    进行中 --> [*]
    结束 --> [*]

5. 资源准备

在运行前,请确保您的项目中有两张图片资源:player.png(玩家飞机)和 enemy.png(敌机),它们需要放置在项目的根目录中。

6. 游戏运行与测试

编译并运行 Main.java 文件,控制飞机通过方向键移动,尝试避开下落的敌机。

结论

通过一个简单的 Java 飞机小游戏,我们学习了如何创建图形界面、处理用户输入以及简单的碰撞检测。虽然这个游戏非常基础,但它为GAME开发的世界打开了一扇窗。可以在此基础上,进行更多的功能扩展,例如添加游戏分数、背景音乐,或者增强游戏玩法。希望这篇文章能激发您对游戏开发的兴趣,并鼓励您继续深入学习。