# Air_Force_Duel **Repository Path**: Chester_Xue/air_force_duel ## Basic Information - **Project Name**: Air_Force_Duel - **Description**: 一个2D竖版射击小游戏,玩家可选择真实世界中的战斗机(如F-22、苏-57、歼-20等),与敌方战机进行实时对战。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-13 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 空军对决 (Air Force Duel) 一款基于Python和Pygame开发的2D竖版射击小游戏。 > **v3.0 重大更新:基于真实飞机的精细化2D建模** — 每款战机的机身、机翼、尾翼、座舱、进气道、引擎喷管均根据真实三视图重构,保留真实飞机的标志性特征。 > > **v3.1 关卡系统** — 7关卡闯关模式,敌机数量与性能逐级递增,每关固定时间出Boss,通关后自动进入下一关。 ## 游戏简介 玩家可以选择真实世界中的战斗机(F-22 Raptor、Su-57 Felon、歼-20、F-35 Lightning II、JAS 39 Gripen 等),与敌方战机进行实时对战。游戏采用数据驱动设计,所有战机属性存储在外部JSON文件中,便于扩展。 ## 运行要求 - Python 3.8+ - Pygame 2.0+ ## 安装依赖 ```bash pip install pygame ``` ## 运行游戏 ```bash python main.py ``` ## 操作说明 ### 移动 - **W / ↑** - 向上移动 - **S / ↓** - 向下移动 - **A / ←** - 向左移动 - **D / →** - 向右移动 ### 射击 - 玩家战机会自动射击(默认每0.2秒发射一颗子弹) - **三连射道具**:一次发射三颗子弹,呈扇形分布 ### 暂停 - **P / ESC** - 暂停游戏 ### 游戏结束 - **R** - 重新开始 - **SPACE** - 重新选择战机 - **ESC** - 返回主菜单 ## 🛩️ 可驾驶战机(5款) 每款战机均经过精细化2D顶视建模,基于真实三视图数据,保留标志性外观特征: ### F-22 Raptor(美国) - **特征**:钻石菱形隐身截面 + 42°后掠梯形翼(锯齿后缘) + 28°外倾双垂尾 + 矩形二元矢量喷管 + CARET菱形进气道 + 内置弹舱 - **座舱**:水泡式偏前 - **面板线**:主弹舱门、侧弹舱门(AIM-9)、起落架舱、翼根、机翼锯齿、辅助进气门 - **标识**:机头空速管(红)、雷达罩分隔线、电子战天线、翼尖航行灯(红/绿) - **定位**:空优,高机动 - **属性**:HP:3 SPD:5 FIRE:0.2s ### Su-57 Felon(俄罗斯) - **特征**:扁平宽大"鸭嘴"机头 + 巨大边条翼(LERX)与机身融合 + 宽间距双发(引擎间有可见隧道) + 全动V型垂尾 + 翼下S形进气道 + λ型机翼带多重后缘锯齿 - **座舱**:偏前(因机头较短宽) - **面板线**:前后串列弹舱、边条翼缝、引擎舱分割、引擎间隧道、V尾根、机翼锯齿 - **标识**:雷达罩分隔线(红)、IRST窗口、尾椎端部(红) - **定位**:重型制空,超机动 - **属性**:HP:3 SPD:4 FIRE:0.2s ### J-20 Chengdu(中国) - **特征**:超长机身(全球最长单座战斗机) + 鸭式+大三角翼三翼面布局 + 高耸全动V型垂尾 + DSI无隔道进气道 + 超长纵列弹舱 + 机头下EOTS - **座舱**:超长座舱盖 - **面板线**:鸭翼连接线、超长弹舱(机身60%长度)、引擎舱、V尾根、减速伞舱、辅助进气口 - **标识**:机头空速管(红)、EOTS窗口、电子战天线 - **定位**:远程截击,高速 - **属性**:HP:3 SPD:4 FIRE:0.15s ### F-35 Lightning II(美国) - **特征**:宽体"肥硕"机身(同代机中最宽) + 梯形中等后掠翼 + 单垂尾+双平尾常规布局 + 菱形CARET进气口 + 大直径F135单发 + 升力风扇特征线 - **座舱**:偏前较宽 - **面板线**:机腹单弹舱、平尾连接、引擎段、升力风扇舱门(STOVL特征)、垂尾顶端天线 - **标识**:雷达罩分隔线、电子设备舱隆起、垂尾航行灯 - **定位**:多用途,对地攻击 - **属性**:HP:4 SPD:3 FIRE:0.25s ### JAS 39 Gripen(瑞典) - **特征**:近距耦合鸭式三角翼布局 + 小型全动鸭翼 + 大三角翼(双三角前缘) + 单发单垂尾 + 机腹两侧进气道 + 紧凑短小机身 - **座舱**:整体风挡靠前 - **面板线**:鸭翼连接线、翼根、单垂尾根、减速板、机翼锯齿(双三角翼转折) - **标识**:雷达罩分隔线、鸭翼(与主翼分开渲染)、翼尖挂点 - **定位**:轻型多用途,高敏捷 - **属性**:HP:2 SPD:7 FIRE:0.15s ## 🎯 关卡系统(v3.1 全新) 游戏共 **7 个关卡**,采用闯关制,难度逐级递增。 | 关卡 | 名称 | Boss出现 | 敌机生成 | 同时最多 | 速度倍率 | Boss HP | 可用敌机 | |------|------|----------|---------|---------|---------|--------|---------| | 1 | 天空初战 | ~3min | 3.0s→2.0s | 3 | 0.7× | 8 | MiG-29 | | 2 | 云层突破 | ~3.5min | 2.6s→1.7s | 4 | 0.8× | 12 | +F-15 | | 3 | 边境巡逻 | ~3.5min | 2.2s→1.4s | 5 | 0.9× | 16 | +Su-34 | | 4 | 高空拦截 | ~3.5min | 1.9s→1.1s | 5 | 1.0× | 20 | +Su-35 | | 5 | 峡谷追击 | ~3min | 1.6s→0.9s | 6 | 1.15× | 25 | +Rafale | | 6 | 绝命空域 | ~2.5min | 1.3s→0.7s | 7 | 1.3× | 30 | 全部 | | 7 | 最终决战 | ~2min | 1.0s→0.5s | 8 | 1.5× | 40 | 全部 | ### 关卡机制 - **时间驱动Boss** — Boss按关卡设定时间出现(不再依赖分数),出现前有倒计时条 - **自动转场** — 击败Boss后自动进入下一关,恢复部分HP,保留分数和命数 - **进度指示** — 屏幕右上角7格指示灯显示通关进度 - **完全通关** — 通过全部7关后展示通关画面与总分 ### 敌机性能逐级递增 - **数量**:每关最多同时敌机数量从3→8递增 - **速度**:敌机基础速度×倍率从0.7×→1.5× - **血量**:敌机从第3关开始+1HP,第7关+3HP - **种类**:从只有MiG-29→逐步解锁全部5种敌机 - **生成速度**:每关内随时间推移进一步加速 ## 核心玩法特色 ### 🎮 道具系统 击毁敌机有概率掉落以下道具: - ❤️ **生命恢复(HP+)** - 恢复1点生命值 - 🔱 **三连射(3×)** - 8秒内发射三颗子弹 - 🛡️ **护盾(SHD)** - 6秒内免疫一次伤害 - ⚡ **加速(SPD)** - 6秒内提升移动速度 - ⭐ **得分加成** - 额外获得500分 ### 🏆 连击系统 连续击杀敌机获得连击倍率: | 连击数 | 倍率 | |--------|------| | 1-2 | ×1 | | 3-5 | ×2 | | 6-9 | ×3 | | 10-14 | ×4 | | 15-19 | ×5 | | 20-24 | ×6 | | 25-29 | ×7 | | 30+ | ×8 | 连击间隔超过2秒则重置。 ### 👾 敌机行为模式 - **直飞型(straight)** - 直线下落,基础射击 - **锯齿型(zigzag)** - 左右摆动,难以瞄准 - **俯冲型(swoop)** - 快速俯冲后减速滞留 - **冲锋型(charge)** - 缓慢接近后突然加速 ### 🦁 Boss 系统 每个关卡固定时间点出现 Boss 敌机: - 体型更大(64×48像素),使用精细飞机模型渲染 - 生命值、速度、射速按关卡递增 - 击败获得 100 × 连击倍率 × 关卡数 分 - 出现前有倒计时条和预警提示 ### ✨ 其他特性 - **平滑移动** - 带加速/减速的惯性移动手感 - **最高分存档** - 分数自动保存到 `data/highscore.txt` - **额外生命** - 每获得500分奖励一条命(上限5条) - **程序化音效** - 射击、爆炸、拾取道具、游戏结束等音效 - **组合 HUD** - 血条、连击显示、增益图标、速度指示 - **敌人渐进** - 随分数解锁更强敌人类型 - **屏幕震动** - 受击时画面震动反馈 - **引擎火焰** - 实时动态火焰效果(支持双发/单发自动识别) - **射击尾迹** - 子弹飞行拖尾效果 ## 配置文件格式 ### 战机配置 (data/aircraft.json) ```json { "name": "F-22 Raptor", "country": "USA", "health": 3, "speed": 5, "fire_rate": 0.2, "bullet_speed": 10, "color": [0, 120, 255] } ``` 字段说明: - `name` - 战机名称 - `country` - 所属国家 - `health` - 生命值 - `speed` - 移动速度 - `fire_rate` - 射击间隔(秒) - `bullet_speed` - 子弹速度 - `color` - 战机颜色 [R, G, B] ### 敌机配置 (data/enemies.json) ```json { "name": "MiG-29", "health": 1, "speed": 2, "fire_rate": 1.5, "bullet_speed": 5, "color": [200, 50, 50], "pattern": "straight" } ``` 新增字段: - `pattern` - 移动模式: `straight`(直线)、`zigzag`(锯齿)、`swoop`(俯冲)、`charge`(冲锋) ## 项目结构 ``` airforce_duel/ ├── main.py # 程序入口 ├── game.py # 游戏主类,管理场景切换 ├── renderer.py # 渲染器,封装所有绘图调用(含精细化飞机建模 v3.0) ├── config.py # 配置和常量 ├── resources.py # 资源管理(预留) ├── sounds.py # 程序化音效生成和管理 ├── data/ │ ├── aircraft.json # 战机配置 │ ├── enemies.json # 敌机配置 │ ├── highscore.txt # 最高分存档(自动生成) │ └── sounds/ # 音效文件目录(自动生成) ├── entities/ │ ├── player.py # 玩家战机 │ ├── enemy.py # 敌机 │ ├── bullet.py # 子弹 │ └── powerup.py # 道具 └── scenes/ ├── menu_scene.py # 菜单场景 ├── select_scene.py # 战机选择场景 ├── battle_scene.py # 战斗场景 └── gameover_scene.py # 游戏结束场景 ``` ## 设计特点 1. **逻辑与渲染分离** - 所有游戏状态更新不直接调用绘图函数,便于迁移到其他图形框架 2. **数据驱动** - 战机属性存储在JSON文件中,无需修改代码即可添加新战机 3. **模块化设计** - 场景、实体、渲染器各自独立,便于维护和扩展 4. **精细化飞机建模** - 每款战机以真实三视图为参考,使用多达30+顶点构建机身轮廓,锯齿边缘、进气道、弹舱门等细节均被呈现 5. **程序化音效** - 使用Python标准库`wave`模块生成WAV音效,无需外部音频文件 6. **平滑交互** - 带惯性的移动系统、屏幕震动、动态火焰等提升手感 ## 游戏规则 - 玩家子弹击中敌机:得分+10(基础,含连击倍率) - 敌机子弹击中玩家:生命值减少(有护盾则消耗护盾) - 玩家与敌机相撞:消耗护盾或立即死亡 - 生命值归零:消耗一条命,剩余生命归零则游戏结束 ## 许可证 MIT License