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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讲文明的喜羊羊拒绝pua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值