Skip to content

AlanRosston/AirplaneWar

Repository files navigation

Airplane War - 2D纵版射击游戏

项目简介

这是一个使用Qt6框架开发的2D纵版射击游戏(STG),支持两名玩家在同一台计算机上进行实时游戏。游戏采用C++17标准开发,利用Qt的2D图形绘制系统实现流畅的空战体验。

游戏特性

核心玩法

  • 双人合作模式:两名玩家同屏操作各自的战斗机
  • 实时射击:连续射击系统,可发射子弹攻击敌机
  • 炸弹系统:每位玩家拥有炸弹道具,造成范围伤害
  • 敌机系统:包含普通敌机和精英敌机两种类型
  • 道具掉落:精英敌机被击败后掉落生命值恢复或炸弹道具

游戏机制

  • 移动限制:玩家只能在屏幕下半部分移动
  • 敌机AI:敌机从上方生成,具有摇摆移动轨迹并会发射子弹
  • 碰撞检测:完整的碰撞检测系统
  • 生命值系统:玩家和敌机都具有生命值
  • 游戏菜单:包含开始游戏和退出游戏选项

操作说明

玩家1控制

  • WASD:移动战斗机
  • J:射击
  • K:使用炸弹

玩家2控制

  • 方向键:移动战斗机
  • 0:射击
  • 1:使用炸弹

通用操作

  • ESC:返回主菜单

构建和运行

系统要求

  • Linux操作系统
  • Qt6开发环境
  • CMake 3.16或更高版本
  • C++17兼容的编译器

快速开始

方法1:使用构建脚本(推荐)

# 进入项目目录
cd /home/alanrosston/Coding/CProject/QtFiles/Project

# 运行构建和启动脚本
./build_and_run.sh

方法2:手动构建

# 进入项目目录
cd /home/alanrosston/Coding/CProject/QtFiles/Project

# 创建构建目录
mkdir build && cd build

# 配置项目
cmake ..

# 编译项目
make

# 运行游戏
./AirplaneWar

方法3:使用VS Code任务

如果你在VS Code中打开项目,可以:

  1. Ctrl+Shift+P 打开命令面板
  2. 输入 "Tasks: Run Task"
  3. 选择 "Build and Run AirplaneWar"

项目结构

重构后的文件组织

Project/
├── main.cpp                      # 程序入口
├── CMakeLists.txt               # CMake构建配置
├── build_and_run.sh             # 构建和运行脚本
├── README.md                    # 项目说明文档
├── include/                     # 头文件目录
│   ├── core/                    # 核心系统头文件
│   │   ├── game.h              # 主游戏类
│   │   ├── gameobject.h        # 基础游戏对象类
│   │   └── gamestate.h         # 游戏状态枚举
│   └── entities/                # 游戏实体头文件
│       ├── player.h            # 玩家类
│       ├── bullet.h            # 子弹类
│       ├── enemy.h             # 敌机类
│       └── item.h              # 道具类
├── src/                         # 源文件目录
│   ├── core/                    # 核心系统实现
│   │   ├── game.cpp            # 主游戏类实现
│   │   └── gameobject.cpp      # 基础游戏对象实现
│   └── entities/                # 游戏实体实现
│       ├── player.cpp          # 玩家类实现
│       ├── bullet.cpp          # 子弹类实现
│       ├── enemy.cpp           # 敌机类实现
│       └── item.cpp            # 道具类实现
└── build/                       # 构建输出目录
    └── AirplaneWar             # 可执行文件

代码架构说明

核心模块 (core/)

  • GameObject: 所有游戏实体的基类,提供位置、大小、速度、生命值等基本属性
  • GameState: 游戏状态枚举(菜单、游戏中、游戏结束)
  • Game: 主游戏控制器,负责游戏循环、渲染、事件处理

实体模块 (entities/)

  • Player: 玩家飞机类,继承自GameObject
  • Bullet: 子弹类,包含伤害属性
  • Enemy: 敌机类,支持普通和精英两种类型
  • Item: 道具类,支持生命恢复和炸弹两种类型

设计模式应用

  1. 继承: 所有游戏实体都继承自GameObject基类
  2. 组合: Game类包含各种游戏实体的集合
  3. 智能指针: 使用std::unique_ptr管理内存
  4. 模块化: 不同功能分离到不同文件夹

技术实现

核心技术

  • Qt6 Widgets:用户界面和窗口管理
  • QPainter:2D图形绘制
  • QTimer:游戏循环和动画
  • STL容器:游戏对象管理
  • 智能指针:内存管理

游戏架构

  • 游戏状态管理:菜单、游戏进行、游戏结束
  • 对象导向设计:玩家、敌机、子弹、道具等游戏对象
  • 碰撞检测算法:矩形碰撞检测
  • 渲染循环:60FPS游戏循环

游戏截图说明

主菜单

  • 显示游戏标题
  • 提供开始游戏和退出游戏按钮
  • 星空背景动画

游戏界面

  • 上半部分:敌机活动区域
  • 下半部分:玩家活动区域(红色虚线分隔)
  • 实时显示玩家生命值和炸弹数量
  • 动态星空背景滚动效果

扩展功能建议

如果你想进一步扩展游戏,可以考虑:

  1. 音效系统:添加射击、爆炸、背景音乐等音效
  2. 粒子效果:爆炸特效、推进器尾焰等
  3. 更多敌机类型:BOSS敌机、特殊攻击模式
  4. 武器升级:多种子弹类型、威力提升
  5. 关卡系统:多个难度递增的关卡
  6. 分数系统:击败敌机获得分数、排行榜
  7. 联网对战:多人在线模式

故障排除

常见问题

  1. CMake找不到Qt6

    # 安装Qt6开发包
    sudo apt install qt6-base-dev qt6-tools-dev
  2. 编译错误

    • 确保使用C++17标准
    • 检查Qt6是否正确安装
    • 确认CMake版本 >= 3.16
  3. 运行时图形问题

    • 确保系统支持OpenGL
    • 检查显卡驱动是否正确安装

获取帮助

如果遇到问题,请检查:

  • CMake配置输出
  • 编译器错误信息
  • Qt6安装状态

版权信息

本项目仅用于学习和演示目的。使用了Qt6框架,请确保遵守相关开源许可证。


享受游戏,祝你玩得开心! 🚀✈️💥

About

2025 Summer 计算机学院实训

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages