您的位置 首页 知识

蔬菜水果连连看(果蔬连连看)

蔬菜水果连连看
水果连连看作品介绍游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,当时深受各种小姐姐的喜爱,同时也吸引众多程序员开发出多种版本的“连连看”,今天我通过Scratch3.0来实现简单的连连看功能。
操作说明:连连看不用过多的介绍了吧。将2个相同图案的对子连接起来,连接线不多于3根直线,就可以成功将对子消除。全部消除后就赢了。

 
设计思想:这类游戏不是很难做,如果你看过之前的文章解读应该知道主要就是角色克隆就可以了。所以本次我们只需要两个角色,难点是如何实现连连看消除的算法。所以我们先要研究一下连连看的算法,看下面的四个图展现了连连看的基本规则。
 

图 A 中出现在同一直线上无障碍的圈圈可以消除;图 B 中两个圈圈可以通过一次转弯消除;图 C 和图 D 中,两个圈圈可以通过两次转弯消除。我们程序只需要对应这四种情况的消除即可。
一、   游戏的角色所有游戏几乎都一样符合下面的循环:
检测用户输入→冲突检测→更新世界→画面渲染→检测用户输入
 
从上面的思想来分析不难归纳出如下两个角色
l  水果
l  最终提示成功的人物。
水果本游戏几乎所有的代码都集中在水果这个角色里面,为了克隆方便,所有能够显示的水果的图标都加入到这个角色中,同时还添加了空白的角色,方便消除后显示状态。

 
程序主逻辑比较简单,就是一个控制循环判断是否全部消除。这里面变量select1和select2分别代表被选择的水果索引。

初始化数据       这部分主要在初始化列表数据,用来随机产生成对的水果数据。

 
洗蔬菜   这个地方使用了类似扑克洗牌的算法,前后50个随机进行交换,交换三次。

创建克隆体蔬菜的角色复制100个,按照之前初始化的数据表进行布局。生成一个10×10的方阵。因为克隆的函数是共同的,所以私有变量l_clone_id主要是用来识别当前克隆体用的。这个方法可以推广到所有需要识别多个克隆的情况,比如复制子弹,复制NPC等。

程序主逻辑主逻辑就需要在点击控制部分,这里逻辑也比较简单,选择的水果分别放在Select1和Select2中,所以当两个都被选中的情况下,通过函数连连看就行判断。否则取消所有选择,返回初始化的状态。这里有一个广播“选中方块”这个主要是用来显示特效的。

 
连连看这块就是核心逻辑了,注意这里有四个子函数,水平检测,垂直检测,一个拐角检测,两个拐角检测。这个就对应之前的图ABCD,而且这里面后面的函数可以依次使用前面的函数来简化逻辑判断。当然Scratch函数功能有点弱,实现起来比较麻烦,需要使用大量的全局变量进行辅助。

 
1.       水平检测
这里面有几个变量需要稍微解释一下,iterMin和iterMax是用来迭代的,主要代表水平检测的开始和结束水果索引。这个看起来挺复杂,其实很简单就是从头数到尾判断中间是否都是空位。不是的话就检测失败。判断是不是空位只需要通过DataMap里面存储的数据判断即可(==0)。

2.       垂直检测
这部分逻辑和水平基本上是一致,不过要注意DataMap的索引如何向下递减和水平比要+10处理。应为Scratch没有返回值,所以这里Result变量是用来存储返回值的。1的情况下为检测OK。

3.       一个拐角检测
从这里开始就比较复杂了。但是一个拐角可以分解为水平检测和垂直检测,当两个同时满足时,便两点可通过一个拐角相连。即:一个拐角检测 = 水平检测 && 垂直检测。这里分两种情况,先垂直再水平和先水平再垂直,所以逻辑写的比较长,一旦有一个符合的情况就结束判断。仔细看逻辑并不复杂。

1)     A 点至 C 点的垂直检测,以及 C 点至 B 点的水平检测;
2)     A 点至 D 点的水平检测,以及 D 点至 B 点的垂直检测。

 
4.       两个拐角检测
两个拐角检测可分解为一个拐角检测和水平检测或垂直检测。即:两个拐角检测 = 一个拐角检测 && (水平检测 || 垂直检测)

如图,水平、垂直分别穿过 A B 共有四条直线,扫描直线上所有不包含 A B 的点,看是否存在一点 C ,满足以下任意一项:
A 点至 C 点通过水平或垂直检测,C 点至 B 点可通过一个拐角连接。(图中用 C 表示)
A 点至 C 点可通过一个拐角连接,C 点至 B 点通过水平或垂直连接。(图中用 C 下划线表示)

这里面有个变量不容易理解,但只要仔细理解算法就能明白,tempIndex主要是用来迭代所有不包含AB的点的。看图是一个二维的表,但是我们实际上的DataMap是100个一维数组,所以使用一个变量就可以了。所以这里一个大循环tempIndex依次加1一直到100,然后就判断一个拐角和垂直水平检测就可以了。

这里面有一个中间点检测,其实它是用来打补丁的。因为之前的水平垂直检测逻辑不检测开始和结束点。而这次带拐弯时候的检查中间点是需要判断是否为空的。所以这里增加了一个逻辑,这当时是调试时候发现的bug,调试这个问题累个半死。到此水果这个角色的主要逻辑都讲完了。
提示成功角色这里就真的没有任何难点了,一看就明白,使用了消息主要是方便。

二、   后记连连看基本的部分就完成了,当然你可以进行更多的扩展,比如增加消除动画,增加时间等道具,设计难度关卡等,这些就等着有能力的各位来扩展了。欢迎各位粉丝跟我进行互动,期待更好的作品出现。

如果你对我的文章感兴趣,欢迎您关注我的公众号程序的魔法,在哪里我致力于将通用的编程思想融汇到儿童编程中,会有更多的程序解读。能实现功能,会编写程序并不重要,解决问题的思路和思想才是最被需要的技能。

期待您赞赏↓↓↓↓

蔬菜水果连连看相关文章


您可能感兴趣