leetcode付费题 353. 贪吃蛇游戏解题思路 - 指南

贪吃蛇游戏试玩:https://patorjk.com/games/snake/

img

问题描述

设计一个贪吃蛇游戏,要求实现以下功能:

  • 初始化游戏:给定网格宽度、高度和食物位置序列
  • 移动操作:根据指令(上、下、左、右)移动蛇头
  • 规则:
    1. 蛇头碰到边界或自身身体时游戏结束(返回-1)
    2. 吃到食物时蛇身长度增加
    3. 未吃到食物时正常移动(蛇头前进,蛇尾收缩)
核心思路
  1. 网格坐标转换
    • 使用一维坐标表示位置:x + y * 宽度
    • 简化位置计算和存储(0 表示 (0,0),1 表示 (1,0) 等)
  2. 蛇身存储
    • 使用队列(LinkedList)存储蛇身位置
    • 队首(头部)是最早加入的位置(蛇尾)
    • 队尾(尾部)是最新加入的位置(蛇头)
  3. 移动处理
    • 根据方向更新蛇头坐标
    • 边界检查:超出网格边界立即结束游戏
    • 碰撞检测:通过位置队列判断是否撞到自身
  4. 食物机制
    • 按顺序检查当前食物是否被吃
    • 吃到食物:不移除蛇尾,蛇身增长
    • 未吃到食物:移除蛇尾,保持长度
关键算法步骤
  1. 初始化

    public SnakeGame(
    int width,
    int height,
    int[][] food) {
    
    this.W = width;
    // 网格宽度
    this.H = height;
    // 网格高度
    this.FOOD = food;
    // 食物序列
    this.queue.offer(0
    )
    ;
    // 初始位置(0,0)
    }
  2. 移动操作

    public
    int move(String direction) {
    
    // 1. 更新蛇头坐标
    switch (direction.charAt(0
    )
    ) {
    
    case 'U'

posted on 2025-10-05 13:01  slgkaifa  阅读(3)  评论(0)    收藏  举报

导航