为了账号安全,请及时绑定邮箱和手机立即绑定

在main2048.js中的moveLeft()等move函数中,前一次保存的hasConflicted[i][k]的值为什么可以用于下一次for循环,比如前一次运行时i和k的值都为0,那下次for循环时i和k的值都变为1时,此时做!hasConflicted[i][k]的判断不是判断的对应的i和k都为1时的结果吗,与前一次保存的hasConflicted[i][k]岂不是没有关系???。。。。。。。。。。我的意思是在前一次运行之后,保存hasConflicted[i][k]为true是保存的所有i,k下的hasConflicted[i][k]为true,而不是当下的i,k为true?????

正在回答

4 回答

以moveLeft为例,这不是一个简单的i,k顺次+1的双重循环,j也在变换。(i,j)的变化控制选择可能需要移动的位置,(i,k)的变化控制可能移动到的位置。 i,j,k的数值变化不超过4,如果愿意可以用纸笔模拟一下整个程序,或者在firebug下作一些断点研究一下。

0 回复 有任何疑惑可以回复我~

好 我去模拟一遍

0 回复 有任何疑惑可以回复我~

!hasConflicted[i][k] 是对当前的(i,j)判断(i,k),此时的(i,k)可能在上一次(i,j)判断中,hasConflicted[i][k]被赋为true。 再一次,希望你预设一个状态,比如 2 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 用纸笔模拟一遍moveLeft的hasConflicted,有助于你理解整个算法的思路。

1 回复 有任何疑惑可以回复我~

这个我明白 现在问题是hasConflicted[i][k] = true是将当下的i、j对应的hasConflicted[i][k]保存为true,还是将所有的hasConflicted[i][k]都保存为true??。。。做!hasConflicted[i][k]的判断时是对之前的那个i、j下的!hasConflicted[i][k]做的判断的吗

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信