创心
2017-12-29 23:55
10:09秒处 181-183 行 代码做什么用的, 代码逻辑 消除第0行(最高一层 ) 为空。 意义何在?
你有其他联系方式吗?老师的代码没有错,这一部分的逻辑我整理很久,算是很通了,可以给你说一下。
你上面的人的答案逻辑是对的,如果你理解不来,把你发的截图中的每一个if语句/for循环语句的功能完全明白,最好能够结合游戏矩阵画图表示前后变化,你明白了
// 消行 const checkClear = () => { for(let i=gameData.length-1; i>=0; i--){ if(gameData[i].every(item => item === 1)){ // 从底部开始,遍历是否有一行全为1,是则满足消行条件,将这一行抛出,并在gameData最顶端加一个空行 gameData = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...gameData.slice(0, i), ...gameData.slice(i + 1) ] } } }
忍不住这么写。。。
16-19层 有放块, 19层消行, 16层跌落到17层,此时15层为空,同样会跌落到16层,即16层变为空(数据清除)
因为最顶层(gameData[0])没有上一层了,需要手动将其设置为0,gameData[0][n] = 0
注意循环遍历的是所有行,从最底层到最顶层,并不是到有方块的那层就停止
为什么我的固定方法不起作用??!
gameData[0][n] 永远代表清除第0行的数据 ,我16-19层 有放块, 19层消行, 16层跌落到17层, 原来16层数据并没有清除, 而是清除的0层数据, 老师把这里写死了,明显是录视频多次忘了改掉,实际运行会是个变量。
我给你讲一下消行的整个逻辑,就是先一个大循环,遍历所有行,如果有一行是全1,就把所有方块往下移一行,对应的是gameData[m][n] = gameData[m-1][n]这段代码,然后最高层的就要变为空,也就是置0,也就是你问的。
基于websocket的火拼俄罗斯(单机版)
31668 学习 · 111 问题
相似问题