连线消除游戏的原理和实现

简介: 连线消除游戏的原理和实现

嗨!大家好,我是小蚂蚁。


继三消和点消之后,我们来继续了解下一种连线消除游戏的原理和实现。连线消除和之前的两种有着很大的不同,因为它不需要自动的查找算法,连线的整个过程都是由玩家自主手动完成的。

如图,连线消除游戏的规则是这样的:从玩家按住第一个图标开始,可以沿着水平,竖直,斜方向划线,如果划到的另一个图标跟之前的图标是一样的,就连起来,可以一直连直到再没有相同的图标为止。此时玩家松手,如果连成线的图标数量大于等于三个,则这些图标就能够被消除。


在连线消除游戏中,重点有两个,一个是判断下一个划到的图标跟之前的图标是否相同,是否应纳入匹配队列,另一个是如何将这些相同的图标用线连起来。

先理论

老规矩,我们还是先看理论部分,先来解决第一个问题,如何判断下一个划到的图标跟之前的图标是否相同。

如图,中间的 6 个绿色的三角形图标是相同的,可以用一条线把它连起来。但是我们怎么才能让计算机知道它们 6 个是一样的呢?如果之前有好好学习的话,那你应该立即反应过来,数据抽象呀!

如图,每个图标都对应一个数字,我们就可以把当前的整个游戏抽象成一个包含数字的表格,判断两个图标是否一样,其实就变成了判断两个数字是否相等。


至于如何能知道玩家当前按住了哪个图标呢?网格布局呀!至于如何知道玩家手指当前划到了哪个图标呢?还是网格布局呀!


再来解决第二个问题,如何将相同的图标用一条线连接起来。

把所有相同的图标连成一条长线,其实就是在每两个相邻的图标之间连一条短线,如图,一共是 6 个相同的图标,那么共需要 5 条短线来把它们全部连接起来。


在玩家操作的过程中,我们可以将相同图标的位置存储到一个匹配列表中,连线的时候,只需要从匹配列表中依次的取出两个相邻图标的位置,然后在这两个位置之间创建一条直线即可。


至于如何消除,消除后上方的图标如何下落,系列课里之前都有讲过,不会的同学可以去前面补课,这里就不再重复讲了。


以上就是理论部分了,相比三消和点消,连线消除真的简单很多。

再实践

接下来,我们就来看一下连线消除游戏在微信小游戏制作工具中的实现吧!


首先,来看一下对于玩家操作处理的积木逻辑。


玩家手指按下:

玩家手指滑动:

玩家手指抬起:

其中有一个地方可能有的同学不太理解,就是为什么要把行列号换算成索引,有的时候又要把索引换算成行列号呢?因为换算成索引可以让我们只需要使用一个列表就可以存储一个图标位置。我们都知道行列号是一个图标的唯一标识,如果我们存储行列号的话,一个行号一个列号就得使用表格的形式,或者使用两个列表。现在我们把它换算成索引,只需要使用一个列表就够了。之前的课程中我们讲过,行列号和索引是等价的,是可以互推的,所以为了存储方便,我们就转换成索引,为了计算方便,我们就转换成行列号。

接着再来看一下图标上的匹配判断。

匹配判断很简单,整个过程是这样的:每当玩家的手指滑动到一个相邻的图标上时,就给所有的图标发送一次匹配通知,每个图标都会判断当前是否划到了自己身上,并且判断自己是否跟之前连接的图标类型相同,当同时满足这两个条件时,就把这个图标加入到匹配列表中。

以上的这些是如何找到相同的图标,并且把它们的索引记录到一个匹配元素列表中。有了这个列表,就相当于我们有了每个图标的行列位置,接下来就是依次的取出两个图标,然后用一条线将它们连接起来了。

如图,是连接线的积木逻辑,注释已经写的很清楚了。这里我们重点来看一下其中的获取两个点位置的函数,这个函数的作用是利用两个图标的索引,计算出这两个图标在屏幕上的坐标位置(x,y)。

这个函数的积木逻辑主要进行计算处理,先利用图标的索引计算出图标的行号和列号,然后再根据行列号计算出图标在屏幕上的位置坐标 (x,y),并存储在返回列表中,这里我们利用了一个局部的列表变量来存储函数计算的值,用于在后续创建连线的时候使用。

最后,我们再来看一下如何根据两个点的坐标位置,设置一条连接线。

都是一些简单的数学计算,这里就不再赘述了。


连线消除的教程到此就结束了,至此,我已经写完了三消,点消,连线消的所有教程,这个坑总算是填完了,终于可以长长的舒一口气了。


消除游戏至今仍然是一个很大的品类,受众很广泛,对于个人游戏开发者来讲依然是个不错的选择。希望这些系列教程能够帮助你了解各种各样的消除游戏,如果觉得教程不错,不要忘了点赞转发,也算是对我辛勤创作的一点儿鼓励了,哈哈!

相关文章
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
本文介绍在ArcMap软件中,基于消除面部件(“Eliminate Polygon Part”)工具,对矢量面要素的零碎、空洞区域加以删除,同时将游离于要素主体之外的部分剔除的方法~
112644 1
ArcMap矢量图层的零碎、空洞区域填补与独立区域剔除:消除面部件
|
7月前
|
图形学
小功能⭐️Unity 如何判断物体是否在摄像机视野内或外
小功能⭐️Unity 如何判断物体是否在摄像机视野内或外
|
量子技术
叠加态和超级定位:量子世界的奇特现象
在量子力学中,叠加态是一种非常特殊的态。当一个量子系统可以处于多个可能的状态时,它可以被描述为这些状态的线性叠加。这意味着系统处于叠加态时,它同时处于多个状态的叠加之中。叠加态可以用波函数的线性组合来表示
229 0
叠加态和超级定位:量子世界的奇特现象
|
10月前
|
索引
消除游戏中图标下落的原理和实现
消除游戏中图标下落的原理和实现
67 1
|
10月前
|
开发者
所有消除游戏背后都有一张看不见的网格
所有消除游戏背后都有一张看不见的网格
118 0
|
前端开发 芯片
【芯片前端】保持代码手感——不重叠序列检测
【芯片前端】保持代码手感——不重叠序列检测
|
存储 算法 Serverless
连线消除游戏的原理和实现
继三消和点消之后,我们来继续了解下一种连线消除游戏的原理和实现。连线消除和之前的两种有着很大的不同,因为它不需要自动的查找算法,连线的整个过程都是由玩家自主手动完成的。
218 0
|
索引
消除游戏中宝石下落的原理和实现
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
213 0
|
开发者
所有消除游戏背后那张看不见的网格
观察一下上方的这一系列各种各样的消除游戏的图片,它们都有着这样的一个共同点,就是都是按照行列进行布局,有 7 行 7 列,有 10 行 10 列的。这样的行列布局是不是特别的像一个“网格”?这就是我们今天要讲的,所有消除游戏背后都有的那张看不见的“网格”。
124 0
如何做一个俄罗斯方块3:形状控制
今天,我们来继续学习和实现下一个模块:玩家控制形状。在俄罗斯方块游戏中,玩家可以对下落的形状进行控制,控制分为两种,一种是控制形状的移动(左,右,下),一种是控制形状的旋转(顺时针旋转 90 度)。
174 0