一款使用纯 Java Swing/AWT 开发的 2D 飞行射击游戏,无需任何外部依赖。
- 游戏简介
- 快速开始
- 操作说明
- 游戏模式
- 敌人系统
- Boss 系统
- 增益球
- 货币系统
- 商店系统
- 皮肤系统
- 科技树
- 成就系统
- 肉鸽模式
- 每日挑战
- Boss 速通
- 音效系统
- 设置功能
- 技术架构
- 项目结构
- 构建与运行
机战风云 是一款以太空为背景的 2D 纵版飞行射击游戏(STG)。玩家操控战机在星空中与各类敌机作战,击败 Boss 获取奖励,通过商店、科技树、皮肤等系统不断强化自己,挑战更高难度。
核心特色:
- 4 种游戏模式:经典、肉鸽、每日挑战、Boss 速通
- 21 款战机皮肤,每款拥有独立机身形状、配色和子弹特效
- 40+ 科技技能,含攻击/防御/辅助三大系
- 实时合成的背景音乐(主界面 128 BPM / 战斗 160 BPM / Boss 180 BPM)
- 所有音效均为程序实时合成,无需任何音频资源文件
- 全中文/英文双语支持
- 纯 Java SE,零外部依赖
- JDK 17+
- Maven 3.x(或使用项目自带的 Maven Wrapper)
- 操作系统:Windows / macOS / Linux
# 使用 Maven Wrapper(推荐)
mvnw clean package
java -jar target\aircraft-war-1.0-SNAPSHOT-jar-with-dependencies.jar
# 或使用 Maven
mvn clean package
java -jar target\aircraft-war-1.0-SNAPSHOT-jar-with-dependencies.jar注:
mvnw.cmd(Windows)或./mvnw(macOS/Linux)为项目自带的 Maven Wrapper,会自动下载对应版本 Maven。
| 操作 | 按键 | 说明 |
|---|---|---|
| 移动 | 鼠标移动 | 控制战机在屏幕内任意移动 |
| 射击 | 自动 | 战机持续自动开火 |
| 炸弹 | Space |
全屏清除所有敌人和子弹 |
| 暂停 | ESC |
暂停/继续游戏 |
| 返回 | 点击界面上的 ← 返回 按钮 | 返回上一级菜单 |
标准射击游戏体验。可选择简单/普通/困难难度,击杀敌人填充进度条,进度条满后召唤 Boss。
初始属性极低(1 条命、无升级),一切从零开始。每击败一个 Boss 可从 3 个随机增益中选择一个永久生效。每次选择增益后难度提升一级,挑战极限分数。
可用增益列表:
| 增益 | 效果 |
|---|---|
| 攻击强化 | 伤害 +10% |
| 攻击精通 | 伤害 +20% |
| 射速提升 | 射速 +15% |
| 射速精通 | 射速 +30% |
| 生命 +1 | 最大生命 +1 |
| 生命 +2 | 最大生命 +2 |
| 护盾 | 获得一个护盾 |
| 财富 | 金币掉落 +25% |
| 大富翁 | 金币掉落 +50% |
| 磁铁 | 磁铁范围 +50% |
| 僚机 | 获得一个僚机 |
| 暴击精通 | 暴击率 +20% |
| 速度提升 | 移动速度 +20% |
| 幸运儿 | 增益球掉落率 +30% |
每天随机生成新的挑战参数(敌人生成速率、Boss 频率、奖励倍率等),达成目标分数即为挑战成功。每天只能完成一次。
连续挑战 Boss,Boss 血量提升至 300%,测试玩家极限。记录最佳波次。
| 类型 | 颜色 | 血量 | 分数 | 特点 |
|---|---|---|---|---|
| 普通 | 红色 | 1 | 10 | 直线飞行 |
| 快速 | 橙色 | 1 | 20 | S 形蛇行移动 |
| 蜂群 | 青绿 | 1 | 8 | 极小极快,锯齿移动 |
| 坦克 | 紫色 | 2 | 50 | 会开火反击 |
| 狙击 | 深绿 | 1 | 35 | 发射高伤害狙击弹 |
游戏内置时间难度递增机制(每 25 秒难度等级 +1)。随着难度提升,敌人的血量和生成速度会逐渐增加。
此外,在设置中可选择整体难度:
| 难度 | 生成速率 | 敌人血量 | 敌人速度 | 敌人射击间隔 | 玩家射速 |
|---|---|---|---|---|---|
| 简单 | 60% | 60% | 70% | 150% | +2 级 |
| 普通 | 120% | 100% | 100% | 100% | 不变 |
| 困难 | 180% | 200% | 120% | 70% | -1 级 |
击杀敌人填充进度条,进度条满后 Boss 出现。Boss 血量计算公式:
Boss 血量 = 40 + Boss序号 × 15 + 难度等级 × 10
| 攻击模式 | 描述 |
|---|---|
| 散射 | 5 发扇形子弹 |
| 三连 | 三发并列下坠 |
| 螺旋 | 旋转扩散弹幕 |
| 召唤 | 召唤蜂群小怪助战 |
散射魔王、激光战舰、蜂群领主、狙击王者、螺旋魔神、爆破大师、幻影死神、钢铁堡垒、亡灵法师、风暴巨兽、深渊领主、终极霸主
每种 Boss 对应一个专属成就。
| 图标 | 颜色 | 名称 | 效果 |
|---|---|---|---|
| ×2 | 蓝色 | 双倍火力 | 双发子弹,持续 10 秒 |
| ×3 | 紫色 | 三倍火力 | 三发子弹,持续 5 秒 |
| 盾 | 绿色 | 护盾 | 抵挡一次伤害 |
| 炸 | 红色 | 炸弹 | 全屏攻击(同 Space 键) |
| +血 | 粉色 | 回血 | 恢复 1 点生命 |
| >> | 黄色 | 射速提升 | 射速增加,持续 8 秒 |
| 磁 | 青色 | 磁铁 | 扩大金币吸引范围,持续 10 秒 |
| 货币 | 图标 | 获取方式 | 用途 |
|---|---|---|---|
| 金币 | $ |
击杀敌人掉落 | 商店购买皮肤、升级属性 |
| 钻石 | ◆ |
Boss 掉落 | 科技树解锁技能 |
商店支持两大分类:皮肤 和 升级。
每项升级有等级上限,花费随等级递增(基础价格 × (等级+1)²)。
| 升级项 | 基础价格 | 上限 | 每级效果 |
|---|---|---|---|
| 额外生命 | 300 | 5 | +1 初始生命 |
| 攻击力 | 250 | 3 | +1 子弹伤害 |
| 射速 | 200 | 3 | 减少发射间隔 |
| 暴击率 | 450 | 5 | +5% 暴击率 |
| 护盾耐久 | 400 | 2 | 护盾可抵挡次数 +1 |
| 磁铁范围 | 300 | 3 | 增加吸取范围 |
| 增益时长 | 350 | 3 | 增益球效果持续时间 +20% |
| 金币加成 | 250 | 3 | 击杀额外 +50% 金币 |
| 僚机 | 500 | 3 | 每级 +1 僚机 |
可重置所有升级,返还 50% 金币。
共 21 款 皮肤,每款拥有独立的机身形状、配色方案、子弹颜色和僚机颜色。
提示:越贵的皮肤拥有越丰富的色彩和越复杂的机身形状。
| # | 名称 | ID | 价格 | 形状类型 |
|---|---|---|---|---|
| 1 | 蓝凤凰 | default |
免费 | 箭形流线 |
| 2 | 黄金帝王 | gold |
800 | 三角翼轰炸机 |
| 3 | 赤红之龙 | dragon |
1,500 | 锐利战斗机 |
| 4 | 暗影利刃 | stealth |
2,500 | 狭长隐形 |
| 5 | 霓虹冲击 | neon |
4,000 | 未来感棱角 |
| 6 | 圣光天使 | angel |
8,000 | 天使翅膀 |
| 7 | 暗黑恶魔 | demon |
10,000 | 恶魔翅膀 |
| 8 | 冰霜凤凰 | frost |
12,000 | 凤凰展翅 |
| 9 | 烈焰凤凰 | flame_phoenix |
12,000 | 凤凰展翅 |
| 10 | 龙骑士 | dragon_knight |
15,000 | 龙形 |
| 11 | 雷霆机甲 | mech |
18,000 | 机械装甲 |
| 12 | 钛金战神 | titan |
20,000 | 重型装甲 |
| 13 | 虚空行者 | void |
22,000 | 虚空能量 |
| 14 | 幽灵刺客 | ghost |
25,000 | 幽灵形态 |
| 15 | 星辰之翼 | cosmic |
28,000 | 星辰 |
| 16 | 太阳神翼 | solar |
30,000 | 太阳 |
| 17 | 暗月猎手 | lunar |
30,000 | 月亮 |
| 18 | 电磁脉冲 | pulse |
35,000 | 电磁脉冲 |
| 19 | 生化毒液 | venom |
38,000 | 生化毒液 |
| 20 | 量子核心 | quantum |
42,000 | 量子 |
| 21 | 深渊领主 | abyss |
50,000 | 深渊 |
部分皮肤提供子弹伤害加成:
| 伤害加成 | 皮肤 |
|---|---|
| +0 | 蓝凤凰 |
| +1 | 黄金帝王、赤红之龙 |
| +2 | 暗影利刃、霓虹冲击 |
| +3 | 圣光天使、暗黑恶魔、冰霜凤凰、烈焰凤凰、龙骑士、雷霆机甲、钛金战神 |
| +4 | 虚空行者、幽灵刺客、星辰之翼、太阳神翼、暗月猎手 |
| +5 | 电磁脉冲、生化毒液 |
| +6 | 量子核心、深渊领主 |
所有皮肤使用程序多边形渲染绘制,无需任何精灵图(Sprite)资源。每个形状类型对应一套独立的多边形绘制算法。
科技树分为三大系,使用钻石解锁。技能有层级关系,需要先解锁前置技能。
| 技能 | 钻石消耗 | 层级 | 前置 | 效果 |
|---|---|---|---|---|
| 攻击强化 I | 5 | 0 | - | 伤害 +10% |
| 攻击强化 II | 10 | 1 | 攻击强化 I | 伤害 +20% |
| 攻击强化 III | 20 | 2 | 攻击强化 II | 伤害 +30% |
| 射速强化 I | 5 | 0 | - | 射速 +15% |
| 射速强化 II | 10 | 1 | 射速强化 I | 射速 +30% |
| 射速强化 III | 20 | 2 | 射速强化 II | 射速 +50% |
| 暴击精通 | 15 | 1 | 攻击强化 I | 暴击率 +20%,暴击伤害 ×2 |
| 弹射子弹 | 8 | 0 | 射速强化 I | 子弹命中后弹射到附近敌人 |
| 穿透弹 | 8 | 0 | 攻击强化 I | 子弹穿透,最多穿透 2 个 |
| 散射 | 8 | 0 | - | 子弹数量 +1 |
| 吸血攻击 | 8 | 0 | - | 击杀恢复 1 点生命 |
| 燃烧弹 | 12 | 1 | 弹射子弹 | 子弹附加燃烧效果,持续 3 秒 |
| 冰冻弹 | 12 | 1 | 穿透弹 | 子弹减速敌人 40%,持续 2 秒 |
| 连锁闪电 | 15 | 1 | 吸血攻击 | 击杀时对周围敌人造成连锁伤害 |
| 玻璃大炮 | 15 | 1 | 攻击强化 II | 伤害 +60%,最大生命 -1 |
| 钢铁意志 | 12 | 1 | 攻击强化 II | 生命低于 50% 时伤害 +35% |
| Boss 杀手 | 25 | 2 | 钢铁意志 | 对 Boss 伤害 +50% |
| 复仇 | 20 | 2 | 玻璃大炮 | 受伤后 3 秒内攻击力 +30% |
| 技能 | 钻石消耗 | 层级 | 前置 | 效果 |
|---|---|---|---|---|
| 生命强化 I | 5 | 0 | - | 生命 +1 |
| 生命强化 II | 10 | 1 | 生命强化 I | 生命 +2 |
| 生命强化 III | 20 | 2 | 生命强化 II | 生命 +3 |
| 护盾强化 | 8 | 0 | - | 初始获得护盾 |
| 无敌延长 | 12 | 1 | 护盾强化 | 受伤无敌时间 +50% |
| 护盾再生 | 12 | 1 | 护盾强化 | 护盾被破坏后 5 秒自动再生 |
| 反击护盾 | 20 | 2 | 护盾再生 | 护盾被打破时释放冲击波造成 2 点伤害 |
| 复活术 | 25 | 2 | 生命强化 II | 死亡时复活一次(每局) |
| 闪避 | 8 | 0 | - | 15% 概率闪避伤害 |
| 快速回复 | 8 | 0 | 生命强化 I | 无敌时间缩短 40%,回复量提升 |
| 回收利用 | 8 | 0 | - | 击杀恢复少量弹药 |
| 先发制人 | 15 | 1 | - | 开局获得 10 秒火力强化 |
| 技能 | 钻石消耗 | 层级 | 前置 | 效果 |
|---|---|---|---|---|
| 财富 I | 5 | 0 | - | 金币掉落 +25% |
| 财富 II | 10 | 1 | 财富 I | 金币掉落 +50% |
| 经济大师 | 25 | 2 | 财富 II | 商店物品价格降低 20% |
| 磁铁强化 | 8 | 0 | - | 磁铁范围 +50% |
| 磁铁大师 | 12 | 1 | 磁铁强化 | 自动吸取全屏掉落物 |
| 僚机强化 | 15 | 1 | - | 僚机伤害 +30% |
| 僚机强化 II | 25 | 2 | 僚机强化 | 僚机伤害 +60%,额外获得一架僚机 |
| 幸运儿 | 12 | 1 | - | 增益球掉落率 +20% |
| 幸运星 | 8 | 0 | - | 增益球效果持续时间 +30% |
| 时间减速 | 15 | 1 | 幸运星 | 10% 概率触发时间减速 |
| 双倍金币 | 8 | 0 | - | 25% 概率获得双倍金币 |
| 弹药专家 | 8 | 0 | - | 双倍/三倍火力持续时间 +50% |
可重置所有科技,返还 50% 钻石。
共包含 26 项成就,涵盖击杀、连击、生存、金币、皮肤、升级、Boss 挑战等维度。
| 成就 | 条件 |
|---|---|
| 初出茅庐 | 首次击杀敌人 |
| 百战老兵 | 累计击杀 100 个敌人 |
| 千军万马 | 累计击杀 1000 个敌人 |
| Boss 猎人 | 首次击败 Boss |
| Boss 克星 | 累计击败 10 个 Boss |
| 连击大师 | 达成 10 连击 |
| 连击王者 | 达成 25 连击 |
| 生存专家 | 存活超过 5 分钟 |
| 不死鸟 | 单局不受伤通关 |
| 金币猎人 | 累计获得 1000 金币 |
| 富可敌国 | 累计获得 10000 金币 |
| 时尚达人 | 购买第一个皮肤 |
| 收藏家 | 拥有所有皮肤 |
| 满级达人 | 任意升级达到满级 |
| 散射克星 | 击败散射魔王 |
| 激光终结者 | 击败激光战舰 |
| ... | 共 12 种 Boss 类型成就 |
本游戏拥有独特的 实时合成音频系统,所有音效和背景音乐均在运行时由代码实时生成,无需任何音频资源文件。
三轨背景音乐,根据游戏状态自动切换,切换时带 1 秒淡入/淡出过渡:
| 场景 | BPM | 风格 | 描述 |
|---|---|---|---|
| 主界面 | 128 | 大气科技风 | 和弦进行 + 琶音 + 主旋律 + 鼓点 |
| 战斗中 | 160 | 激情电音摇滚 | 小调和弦 + 高速鼓点 + 激烈主音 |
| Boss 战 | 180 | 重金属史诗 | 黑暗和弦 + 双踩底鼓 + 沉重旋律 |
| 音效 | 时长 | 描述 |
|---|---|---|
| 射击 | ~66ms | 短促高频 |
| 命中 | ~100ms | 中频冲击 |
| 击杀 | ~333ms | 上升音调 |
| Boss 出现 | ~1s | 低频警告 |
| 受伤 | ~333ms | 噪声冲击 |
| 金币 | ~166ms | 清脆双音 |
| 增益球 | ~500ms | 上升琶音 |
| 炸弹 | ~500ms | 低频爆炸 |
| 死亡 | ~2s | 下降音调 |
| 设置项 | 可选项 | 说明 |
|---|---|---|
| 语言 | 中文 / English | 全局中英文切换 |
| 难度 | 简单 / 普通 / 困难 | 影响敌人强度 |
| 震屏效果 | 开 / 关 | 受击时屏幕震动 |
| 自动瞄准 | 开 / 关 | 自动瞄准最近敌人 |
| 音效 | 开 / 关 | 控制所有音频 |
| 粒子效果 | 低 / 中 / 高 | 爆炸粒子密度 |
| 屏幕大小 | 900×700 / 1280×720 / 1920×1080 | 窗口分辨率 |
所有设置自动持久化到 settings.properties 文件。
┌─────────────────────────────────────┐
│ Start.java (入口) │
├─────────────────────────────────────┤
│ ScreenManager (屏幕管理) │
├─────────────────────────────────────┤
│ MenuScreen → ModeSelectScreen │
│ ↓ ↓ ↓ ↓ │
│ GameScreen | BossRush | Daily | Rogue │
├─────────────────────────────────────┤
│ ShopScreen | SkillTree | Settings │
│ Leaderboard | Achievement | Help │
├─────────────────────────────────────┤
│ model/ (游戏实体) data/ (数据层) │
│ util/ (工具类) │
└─────────────────────────────────────┘
| 技术 | 用途 |
|---|---|
| Java Swing / AWT | 界面渲染和交互 |
| Java 2D Graphics API | 多边形绘制、渐变、抗锯齿 |
javax.sound.sampled |
实时音频合成输出 |
| Maven | 项目构建管理 |
java.util.Properties |
设置持久化 |
| 文件 I/O | 存档读写 |
| 单例模式 | DataManager、Settings、SoundManager、StarField |
| 策略模式 | 多种敌人类型共享 Enemy 抽象 |
| 观察者模式 | Timer 驱动游戏循环 |
// GameScreen 通过 javax.swing.Timer 驱动
// 60 FPS 固定帧率,每帧执行:
// 1. 处理输入(鼠标/键盘)
// 2. 更新游戏对象位置和状态
// 3. 碰撞检测
// 4. 生成敌人/道具
// 5. 绘制画面Aircraft_War/
├── pom.xml # Maven 构建配置
├── mvnw / mvnw.cmd # Maven Wrapper
├── save.dat # 游戏存档(运行时生成)
├── settings.properties # 用户设置(运行时生成)
├── src/
│ ├── main/
│ │ ├── java/com/aircraftwar/
│ │ │ ├── Start.java # 入口点
│ │ │ ├── GameScreen.java # 主游戏画面
│ │ │ ├── ScreenManager.java # 屏幕管理器
│ │ │ ├── data/ # 数据层
│ │ │ │ ├── Achievement.java # 成就定义
│ │ │ │ ├── DataManager.java # 存档管理
│ │ │ │ ├── RoguelikeBuff.java # 肉鸽增益
│ │ │ │ ├── Settings.java # 设置管理
│ │ │ │ ├── Skill.java # 技能定义
│ │ │ │ └── TextResources.java # 多语言文本
│ │ │ ├── model/ # 游戏模型
│ │ │ │ ├── Player.java # 玩家(含皮肤绘制)
│ │ │ │ ├── Enemy.java # 敌人抽象基类
│ │ │ │ ├── BasicEnemy.java # 普通敌人
│ │ │ │ ├── FastEnemy.java # 快速敌人
│ │ │ │ ├── SwarmEnemy.java # 蜂群敌人
│ │ │ │ ├── TankEnemy.java # 坦克敌人
│ │ │ │ ├── SniperEnemy.java # 狙击敌人
│ │ │ │ ├── BossEnemy.java # Boss
│ │ │ │ ├── Bullet.java # 子弹
│ │ │ │ ├── PowerUp.java # 增益球
│ │ │ │ ├── Coin.java # 金币
│ │ │ │ ├── Explosion.java # 爆炸特效
│ │ │ │ ├── Wingman.java # 僚机
│ │ │ │ ├── Skin.java # 皮肤定义
│ │ │ │ ├── StarField.java # 星空背景
│ │ │ │ ├── SoundManager.java # 音效管理
│ │ │ │ ├── GameConfig.java # 配置常量
│ │ │ │ ├── GameObject.java # 对象基类
│ │ │ │ └── LeaderboardEntry.java # 排行榜条目
│ │ │ ├── screens/ # 界面
│ │ │ │ ├── MenuScreen.java # 主菜单
│ │ │ │ ├── ModeSelectScreen.java # 模式选择
│ │ │ │ ├── ShopScreen.java # 商店
│ │ │ │ ├── SkillTreeScreen.java # 科技树
│ │ │ │ ├── SettingsScreen.java # 设置
│ │ │ │ ├── AchievementScreen.java # 成就
│ │ │ │ ├── LeaderboardScreen.java # 排行榜
│ │ │ │ ├── HelpScreen.java # 游戏说明
│ │ │ │ ├── BossRushScreen.java # Boss速通
│ │ │ │ ├── DailyChallengeScreen.java # 每日挑战
│ │ │ │ └── DevInfoScreen.java # 开发者信息
│ │ │ └── util/ # 工具类
│ │ │ ├── DrawUtils.java # 绘制工具
│ │ │ ├── DrawCache.java # 绘制缓存
│ │ │ ├── ScaleUtil.java # 缩放工具
│ │ │ └── UIConstants.java # UI常量
│ │ └── resources/images/
│ │ └── avatar.jpg # 头像图片
│ └── test/ # 测试(空)
└── target/ # 编译输出
总计:45 个 Java 源文件,分布于 5 个包中。
# 克隆项目后
mvn clean package
# 构建产物
target/
├── aircraft-war-1.0-SNAPSHOT.jar # 普通 JAR
└── aircraft-war-1.0-SNAPSHOT-jar-with-dependencies.jar # 完整 JAR(推荐)java -jar target/aircraft-war-1.0-SNAPSHOT-jar-with-dependencies.jar推荐使用 IntelliJ IDEA 打开项目,项目已包含 .idea/ 配置目录。
| 文件 | 说明 |
|---|---|
save.dat |
游戏存档(金币、钻石、皮肤、升级、科技、成就、排行榜等) |
save.dat.bak |
存档备份 |
settings.properties |
用户设置(语言、难度、音效、分辨率等) |
这些文件在游戏运行时自动生成和更新,已被
.gitignore排除。
- 开发者: 张杰
- 联系方式: 13955918302
- 技术栈: Java 2D 多边形渲染、实时音频合成、Swing UI
本项目为个人开发作品,仅供学习和交流使用。