https://github.com/galaxywk223/tank-battle
基于 C++20 与 SDL2 的坦克大战游戏课程设计,包含关卡、敌人 AI、道具、碰撞检测、基地保护和排行榜。
https://github.com/galaxywk223/tank-battle
cmake coursework cpp desktop-game game-development sdl2 student-project tank-battle
Last synced: 18 days ago
JSON representation
基于 C++20 与 SDL2 的坦克大战游戏课程设计,包含关卡、敌人 AI、道具、碰撞检测、基地保护和排行榜。
- Host: GitHub
- URL: https://github.com/galaxywk223/tank-battle
- Owner: galaxywk223
- License: mit
- Created: 2026-05-31T02:57:10.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-06-11T10:21:15.000Z (27 days ago)
- Last Synced: 2026-06-11T12:11:58.470Z (27 days ago)
- Topics: cmake, coursework, cpp, desktop-game, game-development, sdl2, student-project, tank-battle
- Language: C++
- Size: 34.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# C++ 坦克大战游戏
坦克大战是基于 C++20 与 SDL2 从零实现的 2D 坦克射击游戏课程设计。游戏包含主菜单、难度选择、关卡推进、敌人 AI、碰撞检测、道具系统、基地保护、排行榜和可分发运行目录。
## 功能特性
- 玩家坦克:支持方向键或 WASD 移动,空格发射子弹。
- 敌人类型:普通、快速、装甲、射手和 Boss。
- 敌人 AI:巡逻、追踪玩家、障碍规避和直线射击。
- 碰撞系统:子弹与墙体、子弹与坦克、坦克与坦克、坦克与墙体碰撞。
- 地图系统:砖墙、钢墙、水域、森林和基地。
- 道具系统:生命、加速、护盾、快速射击和全屏炸弹。
- 关卡流程:5 个递进难度关卡。
- 游戏流程:主菜单 -> 难度选择 -> 游戏中 -> 关卡完成 -> 胜利或失败。
- HUD:分数、生命、关卡、剩余敌人、道具状态和 FPS。
- 排行榜:记录前 10 名分数、难度和到达关卡。
- 稳定性:缺少地图或数据目录时自动生成所需文件。
- 便携运行:运行路径按可执行文件位置解析,便于打包分发。
## 构建要求
- CMake 3.20+
- 支持 C++20 的编译器:MSVC 2022+、GCC 11+ 或 Clang 14+
- Git
- SDL2 由 CMake FetchContent 自动下载,无需手动安装
## 构建方式
```bash
cd tank-battle
mkdir build
cd build
cmake .. -G "Visual Studio 18 2026" -A x64
cmake --build . --config Release
```
Linux 或 macOS 可使用默认生成器:
```bash
cmake ..
cmake --build . --config Release
```
## 运行方式
```bash
cd build/Release
./TankBattle.exe
```
Linux 或 macOS:
```bash
./TankBattle
```
地图和数据目录会在缺失时自动创建。排行榜默认保存到 `data/leaderboard.txt`。
## 分发目录
```text
TankBattle/
├── TankBattle.exe
├── SDL2.dll
├── maps/
│ ├── level1.txt
│ ├── level2.txt
│ ├── level3.txt
│ ├── level4.txt
│ └── level5.txt
└── data/
```
分发流程:
1. 构建 Release 版本。
2. 将 `TankBattle.exe` 和 `SDL2.dll` 放入同一目录。
3. 将 `maps/` 目录复制到可执行文件旁边。
4. 首次运行时自动创建 `data/` 目录。
5. 将目录打包为压缩包。
## 操作方式
| 按键 | 操作 |
| --- | --- |
| W / 方向上 | 向上移动 |
| S / 方向下 | 向下移动 |
| A / 方向左 | 向左移动 |
| D / 方向右 | 向右移动 |
| 空格 | 发射子弹 |
| P / Escape | 暂停或继续 |
| R | 暂停或失败时重开关卡 |
| Q | 暂停时返回菜单 |
| Enter | 确认选择或进入下一关 |
| Up / Down | 菜单导航 |
## 敌人类型
| 类型 | 颜色 | 生命值 | 速度 | 分数 | 说明 |
| --- | --- | --- | --- | --- | --- |
| Basic | 红色 | 1 | 普通 | 100 | 标准敌人 |
| Fast | 橙色 | 1 | 快 | 150 | 移动更快 |
| Armored | 灰色 | 3 | 慢 | 200 | 需要多次命中 |
| Shooter | 紫色 | 1 | 慢 | 250 | 射击频率更高 |
| Boss | 亮红色 | 6 | 慢 | 500 | 第 3 关后出现 |
## 道具
| 符号 | 效果 | 持续时间 |
| --- | --- | --- |
| `+` | 恢复 2 点生命 | 立即生效 |
| `S` | 1.5 倍移动速度 | 10 秒 |
| `D` | 无敌护盾 | 10 秒 |
| `R` | 2.5 倍射击频率 | 10 秒 |
| `B` | 消灭所有敌人 | 立即生效 |
## 地图格式
地图文件为 26 x 26 网格的空格分隔整数文本:
| 值 | 含义 |
| --- | --- |
| `0` | 空地 |
| `1` | 砖墙,子弹可摧毁 |
| `2` | 钢墙,不可摧毁 |
| `3` | 水域,阻挡移动,子弹可穿过 |
| `4` | 森林,可通过并遮挡坦克 |
| `5` | 基地,被摧毁后损失生命 |
## 许可证
本项目基于 [MIT License](./LICENSE) 开源。