You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript贪吃蛇游戏中do/while循环生成苹果的逻辑疑问

贪吃蛇生成苹果逻辑答疑

核心原因:你对do while循环的执行逻辑理解反了

do { 执行代码 } while (判断条件) 的运行规则是:

  • 先无条件执行一次do包裹的代码块
  • 再判断while后的条件:
    • 条件为真:重新回到do块执行代码,进入下一轮循环
    • 条件为假:直接跳出循环,执行循环后面的代码

对应你的代码逐行拆解

function generateApples() {
    do {
        // 第一步:每次循环都随机抽一个方块的索引
        appleIndex = Math.floor(Math.random() * squares.length)
    } while (squares[appleIndex].classList.contains('snake')) // 第二步:判断抽到的方块是不是蛇身
    // 只有当上面的循环跳出(抽到的方块不是蛇身),才会执行下面的加苹果类逻辑
    squares[appleIndex].classList.add('apple')
}
generateApples()

实际运行效果完全符合你的预期:
只要抽到的方块是蛇身(while条件为真),就会一直循环重抽新的随机方块,直到抽到非蛇身的方块才停止循环,给这个合法的方块添加苹果类,绝对不会出现苹果生成在蛇身上的情况。

内容的提问来源于stack exchange,提问作者Espskully

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 04:39:03