飞机大战(Pygame)
一个基于 Pygame 的 2D 飞机大战小游戏,适合学习游戏循环、事件处理、碰撞检测、弹幕系统、Boss 设计、升级机制与合成音效等主题。 仓库地址 github.com/TianJunJ/fe…
功能特性
- 动态背景与星空效果
- 玩家移动与多级散射射击
- 敌机生成与碰撞爆炸粒子
- 道具系统:回血、经验、护盾、武器升级
- Boss 多阶段:扇形扫射、环形弹幕、螺旋弹、瞄准激光
- Boss 间歇冲刺移动与血条展示
- 随波次递增的难度曲线
- 合成音效(无需素材)
- 等级提升随机分支(不打断战斗)
运行环境
- Python 3.11
- Pygame 2.6.x
- NumPy 2.3.x
建议使用 conda 虚拟环境:
conda create -n feiji-dazhan python=3.11 -y
conda activate feiji-dazhan
conda install -c conda-forge pygame -y
conda install numpy -y
或使用 pip:
pip install -r requirements.txt
运行
# 正常启动
python src/main.py
# 快速触发Boss并验证音效等机制
python src/main.py --test-boss
操作
- 移动:方向键或 WASD
- 射击:空格或鼠标左键
- 暂停/继续:P
- 重开:R(在游戏结束界面)
- 退出:ESC
代码结构
src/main.py主程序与所有游戏逻辑- 纯几何绘制(多边形/圆形)替代图片素材,便于快速学习与运行
- 音效由 NumPy 合成并通过
pygame.mixer播放
难度与参数
在 main.py 顶部的 CONFIG 字典中可以调整 Boss 血量基数、随波次增量、各阶段弹幕间隔、激光预热/持续时间等:
CONFIG = {
"boss_hp_base": 180,
"boss_hp_wave_add": 80,
"phase1_interval": 0.35,
"phase2_interval": 0.22,
"phase3_interval": 0.12,
"phase4_interval": 1.2,
"laser_warmup": 0.8,
"laser_active": 0.6,
}
特点
- 游戏主循环:事件处理 → 状态更新 → 渲染 → 帧率控制
- 碰撞检测:矩形与线段距离(激光)
- 数据结构:
@dataclass组织实体状态 - 弹幕设计:阶段化与波次递增
- 合成音效:正弦波/白噪 + 包络
- 随机升级分支:在升级瞬间自动选择,不打断战斗
注意事项
- 若系统音频初始化失败,游戏会自动回退为静音模式
- 终端中显示的
libpng warning为依赖内部提示,不影响运行 - Windows 上使用中文字体可能因系统环境有所差异,代码会自动匹配可用字体