问答详情
源自:7-4 知识拓展和总结

在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?????

提问者:大地223504 2014-07-22 09:35

个回答

  • l1uyub0b0b0
    2014-07-22 10:20:34
    已采纳

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

  • 大地223504
    2014-07-22 14:15:40

    好 我去模拟一遍

  • l1uyub0b0b0
    2014-07-22 12:48:44

    !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,有助于你理解整个算法的思路。

  • 大地223504
    2014-07-22 11:03:33

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