Scratch游戏《2048》实战(三)

上节课我们成功构建了后台数据和前台显示部分的关联,同时还做好了空白位置新增加一个数字2的功能。那么接下来就到了游戏的核心部分,通过方向键来对棋盘上的数字进行移动的部分了。

在这个状态下,按下右键

我们还是以这个图为例来进行分析。
当我们按下方向键右时,棋盘上的所有棋子首先全部右移,先来看数据层面是如何移动的。

(后两张图里我将0设置了隐藏不显示,这里我就不再补充了,大家明白就好)

再图①的情况下按下右键,然后我们发现这里经历了两个过程,首先是由①到②的这个步骤:在这个过程中,所有的棋子都靠到了自己所在行的最右边,也可以换一个思路来理解,就是把之前所有的“0”删除,然后又全部补充在了现有序列的左边,比如第一行由“1010”,变成了“0011”(请仔细思考)。接下来第二个过程,由②到③的步骤:将相邻的元素从最右边开始向左比较,如果有相同的元素,那么我们去掉一个,然后把留下的元素+1,所以第一行的“0011”就变成了“0002”(结合刚才的思考,“0”是不是在这里添加更合适呢?)

这里会有同学提出异议了,之前的文章里指出的游戏规则里说的是,相邻的两个相同的元素应该在移动过程结束后相加呀,1=1=2,这里怎么说是+1呢?
这个问题,我们带着它继续往下看下面这张图,可能就会明白了。

对比上面的后台数据图,是不是

我们从后台数据转化成前台显示后,我们发现,这个相加的规则是针对前台显示而言的,而对于后台的数据来说,显示部分的相加,恰好就等价于数据部分的+1。

既然我们已经分析出了右移时的三个步骤,分别是:①删除同行的所有0;②检查相邻元素是否相同,如果相同就去掉一个然后留下的+1;③补“0”使得该行总数为4。当然,这三个步骤要重复4次(为什么?)。

那么,我们这堂课的作业就是将右移操作转换成代码。