有趣的飞机大战-python版本

12 阅读2分钟

飞机大战(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 上使用中文字体可能因系统环境有所差异,代码会自动匹配可用字体