用 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 编写小型游戏,并且实现了火箭的移动和发射导弹的功能。

相关推荐
n8n9 分钟前
Spring AI 三层架构详解:ChatModel → ChatClient → Controller,同步调用 vs 流式调用(SSE)
后端
用户31268748772012 分钟前
线程池到底怎么管理线程的?从 ThreadPoolExecutor 到拒绝策略全链路拆解
java
小傅哥14 分钟前
Java + DDD,1:1 复刻 Deepseek Harness 项目
前端·后端·ai编程
Lambert28115 分钟前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
后端·aigc
积硅步致千里22 分钟前
Word 里的 .wmf 其实是 EMF:一次 metafile 转 PNG 排障
前端·后端
cpolar技术支持27 分钟前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
爱读源码的大都督35 分钟前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python
杨运交1 小时前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
Raas1001 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway
Andya_net1 小时前
Spring Boot | 条件注解完全指南:从 @Conditional 到 @ConditionalOnExpression 的原理、实践与避坑
spring boot·后端·python