貪吃蛇游戲試玩:https://patorjk.com/games/snake/
問題描述
設計一個貪吃蛇游戲,要求實現以下功能:
- 初始化游戲:給定網格寬度、高度和食物位置序列
- 移動操作:根據指令(上、下、左、右)移動蛇頭
- 規則:
- 蛇頭碰到邊界或自身身體時游戲結束(返回-1)
- 吃到食物時蛇身長度增加
- 未吃到食物時正常移動(蛇頭前進,蛇尾收縮)
核心思路
- 網格坐標轉換
- 使用一維坐標表示位置:
x + y * 寬度
- 簡化位置計算和存儲(0 表示 (0,0),1 表示 (1,0) 等)
- 使用一維坐標表示位置:
- 蛇身存儲
- 使用隊列(LinkedList)存儲蛇身位置
- 隊首(頭部)是最早加入的位置(蛇尾)
- 隊尾(尾部)是最新加入的位置(蛇頭)
- 移動處理
- 根據方向更新蛇頭坐標
- 邊界檢查:超出網格邊界立即結束游戲
- 碰撞檢測:通過位置隊列判斷是否撞到自身
- 食物機制
- 按順序檢查當前食物是否被吃
- 吃到食物:不移除蛇尾,蛇身增長
- 未吃到食物:移除蛇尾,保持長度
關鍵算法步驟
-
初始化
public SnakeGame(int width, int height, int[][] food) {this.W = width; // 網格寬度this.H = height; // 網格高度this.FOOD = food; // 食物序列this.queue.offer(0); // 初始位置(0,0) }
-
移動操作
public int move(String direction) {// 1. 更新蛇頭坐標switch (direction.charAt(0)) {case 'U'