用 Java 编写迷你游戏《飞翔的火箭》

导言:

​ 在这篇文章中,我们将一起使用 Java 编写一个小型游戏,名为《飞翔的火箭》。这个游戏将挑战你的编程技能和逻辑思维,让你亲自体验游戏开发的乐趣。我们会逐步引导你完成游戏的各个功能,同时附上相应的代码示例,方便你理解和实践。让我们开始这个令人兴奋的编程之旅吧!

正文:

准备工作

​ 在开始编写代码之前,我们需要做一些准备工作。首先,确保你已经安装了最新版本的 Java 开发环境(JDK)。接下来,我们需要选择一个集成开发环境(IDE)来编写代码和运行程序。推荐使用 Eclipse 或者 IntelliJ IDEA。

创建游戏窗口

​ 首先,我们需要创建一个游戏窗口,用来展示游戏界面。我们使用 Java 的图形库来实现窗口的创建和管理。以下是一个简单的代码示例:

java 复制代码
import javax.swing.*;

public class RocketGame extends JFrame {
    // 游戏窗口的宽度和高度
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    
    public RocketGame() {
        // 设置窗口的标题
        setTitle("飞翔的火箭");
        
        // 设置窗口的大小
        setSize(WIDTH, HEIGHT);
        
        // 设置窗口关闭时的行为
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 将游戏窗口设置为可见
        setVisible(true);
    }
    
    public static void main(String[] args) {
        // 创建游戏窗口的实例
        new RocketGame();
    }
}

绘制火箭和背景

​ 接下来,我们需要在游戏窗口中绘制火箭和背景。我们可以使用 Java 的绘图库来实现。这里是一个简单的代码示例,绘制一个火箭和背景:

java 复制代码
import javax.swing.*;
import java.awt.*;

public class RocketGame extends JFrame {
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    
    private Image background;
    private Image rocket;
    
    public RocketGame() {
        setTitle("飞翔的火箭");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 加载背景图片
        background = new ImageIcon("background.png").getImage();
        
        // 加载火箭图片
        rocket = new ImageIcon("rocket.png").getImage();
        
        setVisible(true);
    }
    
    @Override
    public void paint(Graphics g) {
        // 绘制背景
        g.drawImage(background, 0, 0, WIDTH, HEIGHT, null);
        
        // 绘制火箭
        g.drawImage(rocket, 100, 100, null);
    }
    
    public static void main(String[] args) {
        new RocketGame();
    }
}

控制火箭的移动

​ 现在,我们来实现控制火箭的移动功能。我们可以通过监听键盘事件来实现火箭的上下左右移动。以下是一个简单的代码示例:

java 复制代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class RocketGame extends JFrame implements KeyListener {
    // 省略之前的代码
    
    private int rocketX = 100;  // 火箭的初始位置
    private int rocketY = 100;
    
    public RocketGame() {
        // 省略之前的代码
        
        // 添加键盘事件的监听器
        addKeyListener(this);
        
        setVisible(true);
    }
    
    // 省略之前的代码
    
    @Override
    public void keyTyped(KeyEvent e) {
        // 空实现
    }
    
    @Override
    public void keyPressed(KeyEvent e) {
        // 监听按键按下事件
        int keyCode = e.getKeyCode();
        
        // 根据按键调整火箭的位置
        if (keyCode == KeyEvent.VK_UP) {
            rocketY -= 10;
        } else if (keyCode == KeyEvent.VK_DOWN) {
            rocketY += 10;
        } else if (keyCode == KeyEvent.VK_LEFT) {
            rocketX -= 10;
        } else if (keyCode == KeyEvent.VK_RIGHT) {
            rocketX += 10;
        }
        
        // 重新绘制游戏窗口
        repaint();
    }
    
    @Override
    public void keyReleased(KeyEvent e) {
        // 空实现
    }
    
    public static void main(String[] args) {
        new RocketGame();
    }
}

完善游戏逻辑

​ 除了上下左右移动火箭,我们还可以添加更多的游戏逻辑,比如火箭的射击功能、敌人的生成等等。在这里,我们只给出一个基本的示例,你可以根据自己的想法和需求进行扩展和改进。

java 复制代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class RocketGame extends JFrame implements KeyListener {
    private static final int WIDTH = 800;
    private static final int HEIGHT = 600;
    
    private Image background;
    private Image rocket;
    
    private int rocketX = 100;
    private int rocketY = 100;
    private int missileX = -1;
    private int missileY = -1;
    
    public RocketGame() {
        setTitle("飞翔的火箭");
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        background = new ImageIcon("background.png").getImage();
        rocket = new ImageIcon("rocket.png").getImage();
        
        addKeyListener(this);
        
        setVisible(true);
    }
    
    @Override
    public void paint(Graphics g) {
        g.drawImage(background, 0, 0, WIDTH, HEIGHT, null);
        
        g.drawImage(rocket, rocketX, rocketY, null);
        
        if (missileX != -1 && missileY != -1) {
            g.setColor(Color.RED);
            g.fillOval(missileX, missileY, 10, 10);
        }
    }
    
    @Override
    public void keyTyped(KeyEvent e) {
        // 空实现
    }
    
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        
        if (keyCode == KeyEvent.VK_UP) {
            rocketY -= 10;
        } else if (keyCode == KeyEvent.VK_DOWN) {
            rocketY += 10;
        } else if (keyCode == KeyEvent.VK_LEFT) {
            rocketX -= 10;
        } else if (keyCode == KeyEvent.VK_RIGHT) {
            rocketX += 10;
        } else if (keyCode == KeyEvent.VK_SPACE) {
            // 火箭发射导弹
            missileX = rocketX;
            missileY = rocketY;
        }
        
        repaint();
    }
    
    @Override
    public void keyReleased(KeyEvent e) {
        // 空实现
    }
    
    public static void main(String[] args) {
        new RocketGame();
    }
}

结语:

​ 通过这个简单的游戏项目,我们实现了如何使用 Java 编写小型游戏,并且实现了火箭的移动和发射导弹的功能。

相关推荐
都叫我大帅哥18 分钟前
深入浅出 Resilience4j:Java 微服务的“免疫系统”实战指南
java·spring cloud
程序员爱钓鱼21 分钟前
Go语言实战案例-判断一个数是否为质数
后端·google·go
程序员爱钓鱼26 分钟前
Go语言实战案例-读取本地文本文件内容
后端·google·go
Cao_Shixin攻城狮2 小时前
Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
android·java·flutter
Dcs5 小时前
还在用 Arrays.hashCode?Java 自己也能写出更快的版本!
java
fouryears_234177 小时前
Spring,Spring Boot 和 Spring MVC 的关系以及区别
java·spring boot·spring·mvc
阿葱(聪)7 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
浮生带你学Java8 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展
板板正8 小时前
SpringAI——提示词(Prompt)、提示词模板(PromptTemplate)
java·spring boot·ai·prompt
板板正8 小时前
SpringAI——对话记忆
java·spring boot·ai