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
相关产品推荐
相关产品推荐

