一个基于 C++17 的 Windows 控制台贪吃蛇小游戏。项目用于 C++ 课程大作业,重点展示面向对象设计、继承与多态,以及常用现代 C++ 写法。
W/A/S/D控制蛇移动P暂停或继续Q退出游戏- 吃到食物后加分并增长蛇身
- 撞墙、撞障碍物或撞到自身时失败
- 达到目标分数后胜利
- 游戏结束后可按
R重新开始
| 运行中 | 暂停 |
|---|---|
![]() |
![]() |
| 失败 | 胜利 |
|---|---|
![]() |
![]() |
.
├── CMakeLists.txt
├── readme.md
├── docs/
│ └── screenshots/ # 运行截图
├── include/ # 头文件
│ ├── Game.h
│ ├── Gameobjects.h
│ ├── Input.h
│ ├── Renderer.h
│ ├── Snake.h
│ └── Types.h
└── src/ # 源文件
├── Game.cpp
├── Gameobjects.cpp
├── Input.cpp
├── Renderer.cpp
├── Snake.cpp
└── main.cpp
- Windows 10/11
- CMake 3.16 或更高版本
- 支持 C++17 的 MinGW g++
- MinGW 构建工具
mingw32-make
推荐使用 CMake:
cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_CXX_COMPILER=g++
cmake --build build
.\build\SnakeGame.exeg++ -std=c++17 -Wall -Wextra -Wpedantic -Iinclude src\main.cpp src\Game.cpp src\Gameobjects.cpp src\Input.cpp src\Renderer.cpp src\Snake.cpp -o SnakeGame.exe
.\SnakeGame.exeGame负责游戏主循环、状态切换、碰撞判断和胜负判断。Snake保存蛇身位置,并处理移动、转向、自身碰撞。Gameobjects是游戏对象基类,Food和Obstacle继承它并重写symbol(),体现继承与多态。Input封装键盘读取,避免游戏主流程直接调用底层输入函数。Renderer负责控制台绘制,使用字符串后备缓冲区先生成完整画面,再一次性输出,减少闪烁。
std::vector管理蛇身和障碍物集合std::unique_ptr管理多态游戏对象std::optional表示当前是否有键盘输入enum class表示方向和游戏状态- 范围
for、初始化列表、auto等写法提升代码简洁性



