首页>少儿编程>Scratch版本开心消消乐游戏中方块的消除与补充逻辑

Scratch版本开心消消乐游戏中方块的消除与补充逻辑

方块的补充是博主考虑时间最久的一个环节,纠结于是否需要扩大数据列表,把删除掉的积木在列表尾部补齐,又担心如果一列消除掉太多,Scratch角色超出边界后坐标移位。反复尝试过程中发现即便相同编号的克隆体堆叠在一起,但只要加一个限制条件,就可以让他们有序的下落。于是就有了本篇博文-《Scratch版本开心消消乐游戏中方块的消除与补充逻辑》,有意思的是,思考最久的方块补充环节,最终却是占代码量最少的一步。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p1

如同小鸟数据的其他案例的极简风格,程序本身仍旧仅包含两个对象,程序的数据处理基本交给了小齿轮角色,彩色方块角色主要负责屏幕展示,但在这个实例中,它们也参与了数据列表的修改。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p2

先来看一下消除检测这块自定义积木的最终形态,上一片博文提到由2进入消除检测,或由0进入消除检测总共有4种情况:

流程2没有消除
流程0没有消除
流程2有消除
流程0有消除

实际上发现有消除后的情况基本一致,无论部分数据有没有被改动,我们统一初始化一下就好。没有消除的时候需要分两种情况,流程0没有消除的情况直接进入流程1,流程2但没有消除的情况,是用户拖拽了错误的方块,没有达成消除条件,我们需要先复位拖动方块,再进入流程1。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p3

因为涉及到对两个彩色方块的私有变量的读取与修改,积木的消除与补充逻辑我们都写在彩色方块这个角色里,先来看一下消除的逻辑,虽然名为消除,实际上我们只是把符合条件的方块变小后隐藏,然后直接挪到了顶端,这样做有什么好处呢,不需要去担心一共需要补充多少块积木,也不用去考虑补充进去的积木的具体坐标,消除就是向上挪,补充就向下挪就好。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p4

被消除(上移)的方块都被赋予一个新的编号值,比如当前数据列表总共64项,我们移上一排,从左到右依次把上移的方块编号修改为“65~72”,如果第一列中同时消去了6块积木,那么我们就空出了6个空格,以及多出了6个编号为65的上移积木。现有的展示在屏幕上的积木编号不能变动,但被修改为随机造型之后,编号的准确性就失去了意义。之所以都设置为“65~72”,是为了在补充积木时,能够与未被消除但需要下落的积木采用同一个逻辑。注意这里的头部有一块将私有变量方块状态置0的积木,如果缺少这一积木,未及时将被拖动的方块状态置0,在后续的拖动中积木的交换会产生“BUG”。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p5

下落的逻辑是这样的,检查克隆体下方是否是空格,如果是则下落一格,把数据表中的原位置修改为0(图中55号),把数据表中的新位置修改为造型编号(图中47号),同时把下落单元格的私有变量—克隆编号,也从55修改为47。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p6

尽管编号为71的积木一共有六块,但因为克隆体还是有运行的先后顺序,当第一个71号发现下方是0,并迅速把下落单元格修改为自己的造型编号之后,运行排名靠后的并列几名就暂时失去了下落的机会,下方的0就像一个漏斗,不管有几个人排队,但每次只能通行一个,当第一个71号下落变成了63,继续下落变成了55之后,原来63的位置又被设置成了0,又有一个幸运儿即将获得下落的机会。

Elimination_and_Supplementary_Logic_of_Blocks_in_the_Scratch_Version_of_Happy_Consumer_Games_p7

补充积木的程序如下,如同文章开头所说,确实是很小的一段代码吧,正应了一句老话:“事儿越大,话越少”。在这段程序中,我们判断数据列表中的0是否都被造型编号所填满,如果没有,继续去搜寻等待下落的克隆体。等到数据列表内再没有空位,我们重新把任务丢给小齿轮,由它来验证是否可以消除,确定接下来进入第几个流程。

成品展示

Scratch版本的开心消消乐

一点补充

原来是设计了0~9共10个彩色方块,实际测试过程中,发现8x8的方阵,有6个造型就足够了,5个难度稍嫌过低,6个偶尔也会有过不了关的现象,大家如果想修改一下难度的话,可以尝试调整克隆体的随机值的范围。

标签: Scratch

移动端可扫我直达哦~

推荐阅读

scratch 2024-06-10

推箱子游戏的人物行进动作与下一关卡的过渡

做这个案例花了很长的时间,主要的时间是用在了寻找一个合适的游戏角色上,虽然网上有很多的4方向的人物动作图,但部分是工种不匹配,总不能找个英俊潇洒的美男子,或是弱不经风的大小姐来干推箱子这种体力活吧,更不用说携带管制刀具的剑士,或是呼风...

少儿编程 Scratch

scratch 2024-06-10

推箱子游戏的地图布局与箱子的运动逻辑

为了利用自定义积木的屏幕免刷新,所以地图布局按惯例扔给了一块自定义积木,整个游戏的逻辑依赖于“关卡缓存”这张列表,首当其冲的就是布局,对于这个游戏,博主将屏幕统一划分成了10横12纵的栅格,不显示的部分都用“0值”填充,虽然实际的游戏...

少儿编程 Scratch

scratch 2024-06-10

Scratch推箱子游戏地图制作-与Excel间的数据交换

在Scratch基础教程这个系列中提到过Excel这个软件,这其实是一个伪装成电子表格的万能工具,我们可以用它来处理数据,也可以用它来转换html格式的表格以便把表格内容发布到网站。当然也有用Excel来画像素图,甚至制作游戏的,对于...

少儿编程 Scratch

scratch 2024-05-31

滚动长方体游戏的边界检测与游戏结果判断

在进行滚动长方体操作时,我们设置了一个名为“方块状态”的变量,根据长方体的初始状态与旋转后的最终状态,我们分析后将其分为3个状态,即下图中的这几个状态:分别是竖直状态;长的一边靠近X轴的状态;以及长的一边靠近Y轴的状态。因为视角变化的...

少儿编程 Scratch

scratch 2024-05-30

Scratch滚动长方体游戏的地图布局与移动

在之前的教程中,我们曾经实现过一个跑酷游戏,通过固定人物,不断平移背景来实现移动效果。在滚动长方体这个小游戏中,博主把长方体的活动范围也限定在了原点附近,所以同样需要移动地图来衬托长方体的移动。一个长方体,绕某根坐标轴旋转的时候,不出...

少儿编程 Scratch

scratch 2024-05-30

Scratch中等距视角下长方体的滚动动作

刚学会上网那会,玩过一个网页版的滚动长方体的游戏,控制一个长方体在一个等距视角下翻滚。当把长方体垂直放入目标方格时,游戏判定胜利,进入下一关。前几天学习了一下2.5d视角的坐标换算与图形变换,准备来实现一个低配版本的滚动长方体游戏。实...

少儿编程 Scratch

scratch 2024-05-28

Scratch利用私有变量拼装可回溯的地图

在Scratch中可以利用两张设置更多的图片来循环播放,形成一个移动的背景,某天突然想到,如果用克隆体像铺砖块一样实现一个背景,又该如何组织呢,于是就动手尝试了一下。发现在生成克隆体的时候可以给克隆体一个私有变量以确定克隆体的x坐标,...

少儿编程 Scratch

scratch 2024-05-24

一个正方形在2.5D视角下是如何转动的?

沿着纵轴旋转45度的无透视游戏叫等距视角的游戏,通俗来说也叫2.5D游戏。很多小游戏都采用了这样的视觉,这个视角在2维的基础上塑造出了立体的视觉效果,相比正视图更有视觉表现力。这个视角看得挺多,但真正要想像一个方块如何在这个视角下转动...

少儿编程 Scratch

scratch 2024-05-22

Scratch版本开心消消乐游戏中的消除统计

我们在alpha版本中基本完成了鼠标操作,并且把游戏进程推到了进程2,接下来尝试完成游戏的消除统计部分,对于消除的逻辑,博主一开始是使用了一个计数器,用于统计相同方块的数量,先把方块推入列表,下一块方块或下二块方块出现不同方块时,重置...

少儿编程 Scratch

scratch 2024-05-21

用Scratch做一个开心消消乐游戏-游戏逻辑与鼠标动作

准备实现一个类似开心消消乐的游戏,对于游戏的细节思考并测试了好多天,这也是博主几天没有更新博客的原因。制作过程中,有一个模糊的总结,单纯的思考并无助于推动项目的进展,实际动手制作尝试,倒是经常有意外的惊吓与惊喜。引用一句不是特别符合的...

少儿编程 Scratch

scratch 2024-05-18

Scratch将一个模拟二维数组顺时针旋转90度

在小鸟数据《Scratch列表变量-一维数组的90度转向》一文中,我们设想并实现了数组的90度旋转,因为急于实现这个“2048”小游戏。所以在实现功能之后没有做更深入的思考,游戏完成之后,感觉还是有一点意犹未尽,逆时针是实现了,顺时针...

少儿编程 Scratch