【附源码】java17实现飞机大战游戏
hello大家好,用java实现小游戏真的很锻炼编程技术,而且很有成就感。比起做增删改查的管理系统来说,简直是不同的两个阶层的程序员。
今天我就教大家用JDK17原生库来实现一个简单的飞机大战,初始编程的你,只要用心就能学会。会大大加深你对面向对象的理解!
视频演示
https://githubs.xyz/show/421e8911-cb4a-42c9-9d51-7ec2beac9861.mp4
视频里面游戏本来是是实现了音效的,时录制时忘记开了扬声器设置,导致电脑播放的声音没有录进去,只录进去了人声!!!
完整游戏源码,我已经整理清楚,移步:
githubs.xyz/product/672
图片演示



技术栈描述
项目框架
- Java SE 17 - 主要编程语言
- Swing - GUI框架(JFrame、JPanel、Timer等)
- Java 2D API - 图形渲染(Graphics2D、BufferedImage)
- Java Sound API - 音效处理(Clip、AudioSystem)
- Maven - 项目构建管理
关键技术特性
- 双缓冲渲染 - 消除画面闪烁
- 60 FPS游戏循环 - 流畅的游戏体验
- 资源缓存机制 - 图片和音效缓存
- 多线程音频 - 并发音效播放
设计模式
1. 单例模式 (Singleton)
- GameManager - 游戏核心管理器
- ImageLoader - 图片资源管理
- SoundManager - 音效管理
2. 工厂模式 (Factory)
- Enemy.createEnemy() - 敌机创建
- PowerUp.createRandomPowerUp() - 道具生成
- Bullet.createPlayerBullet() - 子弹创建
3. 策略模式 (Strategy)
- 敌机移动模式(直线、之字形、正弦波、圆形)
- 不同类型子弹的行为策略
4. 状态模式 (State)
- GameState 枚举管理游戏状态
- 菜单、游戏中、暂停、结束等状态切换
5. 模板方法模式 (Template Method)
- GameObject 抽象基类定义通用行为
- 子类实现具体的 update() 和 draw() 方法
6. 享元模式 (Flyweight)
- 图片和音效资源缓存
- 减少内存占用,提高性能
游戏实现的功能
玩家控制系统
- WASD键位控制 :W(上)、S(下)、A(左)、D(右)移动
- 空格键射击 :连续射击功能
- P键暂停 :游戏暂停/继续切换
生命与血量系统
- 多生命机制 :玩家拥有3条生命
- 血量系统 :每条生命有10点血量
- 无敌时间 :受击后2秒无敌保护
- 血条显示 :实时显示当前血量状态
武器系统
- 基础射击 :200毫秒射击间隔
- 武器升级 :通过道具提升武器等级
- 子弹类型 :普通子弹和强化子弹,伤害和外观不同
敌机系统
- 三种敌机类型 :
- 小型敌机:血量1,速度快,分数10
- 中型敌机:血量3,中等速度,分数30,可射击
- 大型敌机:血量5,速度慢,分数50,可射击
- 爆炸动画 :每种敌机都有专属的爆炸动画序列
道具类型
1. 生命恢复 :瞬间恢复1点血量
2. 护盾 :10秒无敌保护
3. 武器升级 :15秒武器等级提升
分数与统计
- 实时分数显示 :击败敌机获得分数
- 高分记录 :自动保存和加载历史最高分
- 击杀统计 :记录消灭的敌机数量
- 游戏时间 :显示当前游戏进行时间
- 关卡系统 :随时间推进增加游戏难度
游戏实现原理
本小结将讲解游戏中各大类的具体功能,每个类都是实现游戏不可或缺的部分,他们紧密相连来实现一个完整的游戏系统。

程序入口与初始化-Main.java
`Main.java` 是游戏的主入口类:
- 负责系统环境检查和初始化
- 创建必要的资源目录
- 初始化核心管理器(ImageLoader、SoundManager、GameManager)
- 启动游戏主窗口
public static void main(String[] args) { try { // 设置系统属性 setupSystemProperties(); // 检查系统要求 checkSystemRequirements(); // 创建资源目录 createResourceDirectories(); // 初始化游戏组件 initializeGameComponents(); // 启动游戏界面 SwingUtilities.invokeLater(() -> { try { startGame(); } catch (Exception e) { handleStartupError(e); } }); } catch (Exception e) { handleStartupError(e); } }
初始化游戏组件是非常重要的, 游戏的图片加载,音效播放,游戏循环都是在这里初始化的。
/** * 初始化游戏组件 */ private static void initializeGameComponents() { System.out.println("初始化游戏组件..."); try { // 初始化图片加载器 ImageLoader imageLoader = ImageLoader.getInstance(); System.out.println("图片加载器初始化完成"); // 初始化音效管理器 SoundManager soundManager = SoundManager.getInstance(); System.out.println("音效管理器初始化完成"); // 初始化游戏管理器 GameManager gameManager = GameManager.getInstance(); System.out.println("游戏管理器初始化完成"); System.out.println("所有游戏组件初始化完成"); } catch (Exception e) { System.err.println("初始化游戏组件时出错: " + e.getMessage()); throw new RuntimeException("游戏组件初始化失败", e); } }
窗口与界面管理-GameFrame.java
`GameFrame.java` 继承自JFrame,管理游戏主窗口:
- 设置窗口属性(标题、大小、居中等)
- 创建菜单栏(游戏、设置、帮助菜单)
- 集成游戏面板(GamePanel)
- 处理窗口事件和键盘输入
`GamePanel.java` 继承自JPanel,是游戏的核心显示组件:
- 实现60 FPS的游戏循环(使用Timer)
- 双缓冲渲染技术,提供流畅的画面
- 根据游戏状态渲染不同场景(菜单、游戏、暂停、结束等)
- 集成调试信息显示
游戏逻辑管理-GameManager.java
`GameManager.java` 采用单例模式,是游戏的核心控制器:
- 游戏状态管理 :控制菜单、游戏中、暂停、结束等状态转换
- 对象生命周期管理 :管理玩家、敌机、子弹、道具、爆炸等游戏对象
- 游戏逻辑更新 :处理移动、碰撞检测、生成控制、关卡进度
- 数据统计 :分数、高分、击杀数、游戏时间等
- 输入处理 :键盘事件响应和玩家控制
- 渲染协调 :调用各对象的绘制方法
资源管理系统-ImageLoader.java
`ImageLoader.java` 单例模式的图片资源管理器:
- 智能加载 :支持从资源文件和文件系统加载图片
- 缓存机制 :避免重复加载,提高性能
- 默认图片生成 :当资源缺失时自动生成默认图片
- 图片处理 :提供缩放、旋转、翻转等功能
`SoundManager.java` 单例模式的音效管理器:
- 音效播放 :支持音效和背景音乐播放
- 音量控制 :独立的音效和音乐音量控制
- 并发播放 :支持多个音效同时播放
- 资源管理 :音效缓存和预加载机制
基础游戏对象-GameObject.java
`GameObject.java` 抽象基类,定义所有游戏实体的通用属性和行为:
- 基础属性 :位置、尺寸、速度、生存状态、可见性
- 抽象方法 :update()和draw(),强制子类实现
- 通用功能 :碰撞检测、移动、边界检查、销毁等
玩家系统-Player.java
`Player.java` 继承自GameObject:
- 生命系统 :血量、生命数、无敌状态管理
- 移动控制 :响应键盘输入,支持对角线移动速度调整
- 武器系统 :射击控制、武器等级、多重射击
- 特殊状态 :护盾、无敌闪烁效果
- 视觉效果 :受击状态显示、状态指示
敌机系统-Enemy.java
`Enemy.java` 继承自GameObject:
- 敌机类型 :小型、中型、大型敌机,各有不同属性
- 移动模式 :直线、之字形、正弦波、圆形等多种移动模式
- 战斗系统 :血量、射击能力、受击效果
- 爆炸动画 :完整的爆炸动画序列
- AI行为 :自动射击、移动模式切换
子弹系统-Bullet.java
`Bullet.java` 继承自GameObject:
- 子弹类型 :玩家子弹(普通、强化)和敌机子弹(普通、快速)
- 视觉效果 :轨迹效果、粒子效果
- 伤害系统 :不同类型子弹造成不同伤害
- 碰撞处理 :精确的碰撞检测和响应
道具系统-PowerUp.java
`PowerUp.java` 继承自GameObject:
- 道具类型 :生命恢复、护盾、武器升级、速度提升、多重射击、分数加成、无敌、快速射击
- 稀有度系统 :不同道具有不同的稀有度和出现概率
- 视觉效果 :旋转动画、脉冲效果、光环、闪烁警告
- 磁性效果 :稀有道具具有吸引玩家的磁性
- 持续时间 :不同道具有不同的效果持续时间
## 配置与工具系统
常量配置-Constants.java
`Constants.java` 集中管理游戏配置:
- 窗口设置 :尺寸、标题、FPS等
- 游戏对象属性 :各类实体的尺寸、速度、血量、分数等
- 资源路径 :图片和音效文件路径
- 游戏平衡 :生成间隔、掉落概率、持续时间等
- 控制键位 :键盘映射定义
游戏状态管理-GameState.java
`GameState.java` 枚举类定义游戏状态:
- 状态定义 :菜单、游戏中、暂停、结束、设置、关于、加载、退出
- 状态查询 :提供便捷的状态检查方法
- 状态转换 :支持状态间的逻辑转换
游戏启动
将源码导入到idea中,这个项目就是一个普通的maven管理的项目, 导入前,请设置好maven的仓库配置。

设置好JDK的环境为17

等待编译好,启动Main就可以了。游戏图片,声音素材资源在resource目录下面。

浙公网安备 33010602011771号