一个使用原生 Android Java 实现的竖屏飞机大战游戏。项目从课堂版射击游戏继续扩展,加入了多难度战斗、Boss 阶段、道具技能、连击与成就、本地 SQLite 排行榜、在线中心、系统诊断、音频管理、高帧率选项和局域网联机雏形。
| 维度 | 内容 |
|---|---|
| 核心体验 | 拖动英雄机移动,躲避弹幕,击落敌机,拾取道具,挑战 Boss |
| 技术实现 | Android SurfaceView 主循环、Java 面向对象建模、SQLite、NSD 局域网发现 |
| 工程规模 | 150+ 个源码与资源文件,覆盖 Activity、游戏循环、实体、音频、网络、排行榜 |
| 适合展示 | Android 课程设计、面向对象设计模式、小游戏工程化、移动端功能扩展 |
| 模块 | 亮点 |
|---|---|
| 战斗系统 | 简单、普通、困难三档难度,普通敌机、精英敌机、超级精英、Boss、自爆机、狙击机、坦克机等敌机类型 |
| 道具技能 | 回血、炸弹、火力增强、护盾、散射、激光等道具,配合闪避和爆炸能力增强节奏 |
| 反馈表现 | 连击统计、成就解锁、粒子爆炸、屏幕震动、Boss 血条、敌机血条和阶段变化 |
| 数据记录 | 使用 SQLite 保存本地战绩,支持按分数、时间和记录 ID 排序 |
| 在线中心 | 网络健康检查、演示在线榜单、战区情报、本地最佳战绩上传演示 |
| 系统诊断 | 应用内检查音效、BGM、网络状态和本地数据快照 |
| 局域网联机 | 基于 Android NSD 发现房间,提供创建房间、加入房间和基础网络会话能力 |
flowchart LR
Main["MainActivity<br/>主菜单与难度入口"] --> Game["GameActivity<br/>游戏承载与结算"]
Main --> Rank["RankActivity<br/>本地排行榜"]
Main --> Online["OnlineActivity<br/>在线中心"]
Main --> Diagnostics["DiagnosticsActivity<br/>系统诊断"]
Main --> Multiplayer["MultiplayerActivity<br/>局域网联机"]
Game --> Loop["SurfaceView Game Loop<br/>刷新 / 碰撞 / 绘制"]
Loop --> Aircraft["Aircraft & Bullet<br/>飞机与子弹"]
Loop --> Props["Props & Abilities<br/>道具与技能"]
Loop --> Effects["Effects & Audio<br/>粒子与音效"]
| 层级 | 技术 |
|---|---|
| App | Android Gradle Plugin 9.1.0, Java 11, AppCompat, Material Components, ConstraintLayout |
| Game Runtime | SurfaceView, 独立刷新线程, 碰撞检测, 资源加载与绘制 |
| Data | SQLite 本地排行榜, DAO 风格数据访问 |
| Network | Android NSD, 局域网房间发现与基础会话 |
| Test | JUnit, Android instrumented test scaffold |
app/src/main/java/edu/hitsz/
├── MainActivity.java # 主菜单、难度入口、设置入口
├── GameActivity.java # 游戏承载 Activity 与结算流程
├── RankActivity.java # 本地排行榜页面
├── OnlineActivity.java # 在线中心页面
├── DiagnosticsActivity.java # 音频、网络、本地数据诊断页
├── MultiplayerActivity.java # 局域网联机入口
├── application/ # SurfaceView 游戏主循环、资源加载
├── aircraft/ # 英雄机与敌机模型
├── bullet/ # 子弹模型
├── prop/ # 道具模型
├── factory/ # 敌机与道具工厂
├── difficulty_setting/ # 难度策略
├── BulletStrategy/ # 射击策略
├── record/ # SQLite 排行榜持久化
├── online/ # 演示在线服务与榜单映射
├── network/ # NSD 与局域网网络会话
├── audio/ # 游戏音频管理
├── combo/ # 连击管理
├── achievement/ # 成就系统
├── ability/ # 技能能力
└── effect/ # 粒子与爆炸效果
- 工厂模式:统一创建不同敌机和道具,降低主循环中的条件分支复杂度。
- 策略模式:拆分直射、散射、环形、激光等射击方式,让敌机与英雄机可以灵活切换火力。
- DAO 思路:通过
DAO接口隔离排行榜存储实现,避免 UI 直接依赖 SQLite 细节。 - 观察者式爆炸处理:爆炸效果与游戏对象清理解耦,方便扩展新的反馈表现。
- SurfaceView 主循环:独立线程负责刷新、碰撞检测、绘制和游戏状态推进。
使用 Android Studio 打开项目根目录,等待 Gradle 同步完成后运行 app 模块。
也可以在终端构建调试包:
./gradlew assembleDebug运行单元测试:
./gradlew testDebugUnitTest仓库不会提交真实签名密钥。需要构建 release 包时,在项目根目录创建本地文件 keystore.properties:
storeFile=app/your-release-key.jks
storePassword=your-store-password
keyAlias=your-key-alias
keyPassword=your-key-password然后执行:
./gradlew assembleRelease- 完善局域网联机同步协议、房间状态和断线重连。
- 将在线中心从演示接口替换为正式后端服务。
- 补充更多截图、短视频演示和 Release APK。
- 为核心游戏循环、排行榜和网络模块增加更系统的测试。
在线中心目前使用公开演示接口完成网络检测、榜单映射和上传演示,不是正式生产后端。局域网联机能力适合同一 WiFi 下的课程演示和功能验证,后续可以继续扩展同步协议、房间状态和断线重连。
