“飞机大战”是一款经典的街机游戏,玩家控制一架飞机,通过射击敌机来获得分数。本文将使用Java语言为基础,编写一个简单的“飞机大战”游戏。我们将利用Swing库来处理图形界面,使用线程来控制游戏的运行。

在这个游戏中,玩家可以通过键盘控制飞机的移动,射击敌机,并且会有敌机不断出现并向下移动。下面是实现的关键代码和思想。

1. 游戏窗口的初始化

首先,我们需要创建一个游戏窗口,并设定基本的游戏画布。

import javax.swing.*;
import java.awt.*;

public class PlaneGame extends JFrame {

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

    public static void main(String[] args) {
        new PlaneGame();
    }
}

class GamePanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // 在这里绘制游戏内容
    }
}

2. 绘制飞机和敌机

我们需要在游戏面板中绘制玩家的飞机和敌机。我们可以使用Graphics对象的drawImage方法来绘制图像。

class GamePanel extends JPanel {

    private Image playerImage;
    private int playerX;
    private int playerY;

    public GamePanel() {
        playerImage = new ImageIcon("player.png").getImage();
        playerX = 400;
        playerY = 500;

        this.setFocusable(true);
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    playerX -= 10;
                } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    playerX += 10;
                }
                repaint();
            }
        });
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(playerImage, playerX, playerY, null);
        // 绘制敌机
    }
}

3. 敌机的生成与移动

在此部分,我们需要创建敌机类,并使其随机出现以及向下移动。为了简化代码,敌机将在固定的位置生成并以固定速度下降。

class Enemy {
    int x, y;
    Image enemyImage;

    public Enemy() {
        this.enemyImage = new ImageIcon("enemy.png").getImage();
        this.x = (int) (Math.random() * 750);
        this.y = 0; // 起始位置
    }

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

    public void draw(Graphics g) {
        g.drawImage(enemyImage, x, y, null);
    }
}

class GamePanel extends JPanel {

    private List<Enemy> enemies;

    public GamePanel() {
        enemies = new ArrayList<>();
        // 定时生成敌机
        new Timer(1000, e -> {
            enemies.add(new Enemy());
            repaint();
        }).start();

        new Timer(20, e -> {
            for (Enemy enemy : enemies) {
                enemy.move();
            }
            repaint();
        }).start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(playerImage, playerX, playerY, null);
        for (Enemy enemy : enemies) {
            enemy.draw(g);
        }
    }
}

4. 射击功能

为了让玩家能够射击敌机,我们需要添加子弹的类,并在面板中处理子弹的移动和绘制。

class Bullet {
    int x, y;
    Image bulletImage;

    public Bullet(int x, int y) {
        this.x = x;
        this.y = y;
        this.bulletImage = new ImageIcon("bullet.png").getImage();
    }

    public void move() {
        this.y -= 10; // 向上移动
    }

    public void draw(Graphics g) {
        g.drawImage(bulletImage, x, y, null);
    }
}

class GamePanel extends JPanel {

    private List<Bullet> bullets;

    public GamePanel() {
        bullets = new ArrayList<>();
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_SPACE) {
                    bullets.add(new Bullet(playerX + 20, playerY)); // 创建子弹
                }
            }
        });

        new Timer(20, e -> {
            for (Bullet bullet : bullets) {
                bullet.move();
            }
            repaint();
        }).start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(playerImage, playerX, playerY, null);
        for (Bullet bullet : bullets) {
            bullet.draw(g);
        }
        for (Enemy enemy : enemies) {
            enemy.draw(g);
        }
    }
}

5. 整体逻辑

整合所有组件,我们就构建了一个简易的“飞机大战”游戏框架。玩家可以控制飞机左右移动并发射子弹。我们可以后续增加碰撞检测、分数计算、游戏结束逻辑等功能,使游戏更加完整。

通过这段代码,玩家可以体验到一个基本的游戏框架,想要增强游戏的乐趣,还可以进一步美化界面、增加音效等。这些功能的添加会使游戏变得更加丰富多彩。希望通过这篇文章,能启发读者去深入学习游戏开发。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部