# snake_game_cpp **Repository Path**: lundechen/snake_game_cpp ## Basic Information - **Project Name**: snake_game_cpp - **Description**: blablablabla - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-24 - **Last Updated**: 2025-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SNAKE-CPP 项目 好的 👍 你希望把 **GameController、输入、时间**都忽略,只关注 **核心逻辑架构**。那我们可以把 `SNAKECPP` 看成一个“**游戏引擎内核**”,它分成几个主要层次: ## **SNAKECPP 架构(核心逻辑层面)** ### 1. **基础元素层 (Entities)** * **`Cell`** * 表示游戏棋盘上的一个格子(x,y 坐标)。 * 提供比较运算(`==`),用于判断两个格子是否相同。 这是最底层的数据结构,所有其他类都依赖它。 --- ### 2. **游戏对象层 (Game Objects)** #### **`Snake` 蛇** * 内部保存一个动态数组 `Cell** body`,表示蛇的每个身体格子。 * 管理: * 蛇的长度 (`length`) * 最大容量 (`capacity`) * 当前方向 (`direction`) * 提供的功能: * `setDirection()`:设置方向(防止 180° 转向)。 * `move(bool grow)`:移动蛇(可选择是否增长)。 * `collidesWithCell()`:判断是否与某个格子碰撞。 * 内部 `reallocate()`:扩容身体数组。 #### **`Food` 食物** * 保存一个 `Cell*`,表示食物的位置。 * 提供 `setCell(x,y)` 设置食物坐标。 * 提供 `getCell()` 获取食物位置(没有设置时抛异常)。 --- ### 3. **规则与状态层 (Game State & Rules)** #### **`Board` 游戏棋盘** * 内部包含: * 一条 `Snake` * 一个 `Food` * 一个 `bool gameOver` 游戏状态标志 * 主要职责: 1. **游戏逻辑更新** (`update`) * 计算蛇的下一步 * 检查是否撞墙 / 撞自己 * 检查是否吃到食物(决定是否增长蛇体) * 如果吃到食物,则 `spawnFood()` 重新生成食物。 2. **状态管理** * `reset()`:重置游戏(重新生成蛇和食物)。 * `isGameOver()`:判断游戏是否结束。 3. **内部辅助** * `spawnFood()`:在棋盘上生成食物(避免与蛇重叠)。 * `isValidFoodCell()`:验证食物位置是否合法。 `Board` 就是游戏规则的“法官”,它协调蛇和食物,并决定游戏是否继续。 --- ### 4. **辅助功能层 (Utilities)** * **`SnakeException`** * 自定义异常,描述游戏运行中可能出现的错误(如食物未初始化)。 * **运算符重载** * `operator<< (ostream&, const Cell&)`:打印单个格子。 * `operator<< (ostream&, const Board&)`:以文本方式绘制整个棋盘。