如何做一个泡泡龙游戏(五)

简介: 我们今天来继续学习泡泡龙游戏中最核心的东西:查找匹配算法。其实这也不算是什么新东西了,如果你有看过我的其它关于消除游戏的教程,应该会知道,消除游戏的查找算法就那么一个,不论何种类型的消除游戏,这个算法的核心是不变的,只不过会根据不同类型的消除稍作调整而已。所以,如果你之前对查找算法还不是很了解的话,那么就尝试跟随着这篇教程把它彻底搞懂吧!

嗨!大家好,我是小蚂蚁。我们今天来继续学习泡泡龙游戏中最核心的东西:查找匹配算法


其实这也不算是什么新东西了,如果你有看过我的其它关于消除游戏的教程,应该会知道,消除游戏的查找算法就那么一个,不论何种类型的消除游戏,这个算法的核心是不变的,只不过会根据不同类型的消除稍作调整而已。所以,如果你之前对查找算法还不是很了解的话,那么就尝试跟随着这篇教程把它彻底搞懂吧!


先来看一张图片。


640.png


如图,最下方的这个橙色的泡泡是发射过来的泡泡。泡泡龙游戏的规则是,当发射的泡泡停靠后,只要有三个或者三个以上的颜色相同的泡泡,就满足消除条件,就将它们消除。所以图中左下方的 7 个橙色的泡泡满足消除条件,可以进行消除。


这是我们通过眼睛直接看到的结果,但是对于计算机来讲,它无法直接看出来结果(在这方面计算机还是比较笨的)。所以,我们需要为它设置一个算法,让计算机能够通过这个算法找到我们眼睛所看到的结果。


计算机并不擅长直接处理颜色,它所擅长处理的是数据,所以我们需要先帮它把这个泡泡龙游戏“翻译”一下。


13f2a98157d8f0c6fb0e4c1dbc07350b.png


这个“翻译”还有一个名字叫做数据抽象,我们在第二节中已经讲过了,忘记的话可以去回顾一下。


右侧的这个数据表格是查找算法的基础,整个查找算法都是在这张数据表格中进行的。


在开始查找算法之前,我先简单的描述一下整个查找过程:以当前停靠的泡泡为起点,查看周围所有与它相邻的泡泡,如果发现周围有相同颜色(数字相同)的泡泡,那么就以这个泡泡为起点,继续查看其周围相邻的泡泡.....一直重复这个过程,直到周围不再有相邻的泡泡为止。最终已找到的所有颜色相同的泡泡就是满足条件的泡泡了。


上面这个过程并不好理解,不过没关系,你只需要对它有个印象,然后带着这个印象来看接下来的图片。


在正式开始之前,我们要先了解一下,相邻的泡泡都有哪些。


f14a222e26ba3625cf96ec0e8bd07bbc.png


如图,周围的橙色的泡泡都是相邻的泡泡,这里我们约定在查找时,以左上角的泡泡为开始,顺时针进行查找相邻的泡泡。


接着,我们就一步一步的来看整个查找的过程。


fde2eeeb72fc6292a1fbfa093671c743.png


ab621e93655c18b0e161885983a974ae.png


fde7067c7746a9659af3b646ba475e2a.png


d6140a9a8f58443c173635d87ba7640e.png


9b8a95c198b1941a2ceeb1f732b835d3.png


ec34abbb956bfcd37499f2aac574f26a.png


fa448a7614771950548c01d3efe9abf2.png


a5b5168adad9a0331ff684e9ef5d6732.png


至此,我们的查找过程到达了尽头,也就是说当前这个泡泡周围的 6 个位置都没有相同的泡泡了(要么是已找过,要么是空位置,要么是不同)。


整个查找算法到这里算是完成了一部分了,什么?还没有结束?当然了。在所有的橙色泡泡中,目前只有最后的一个泡泡相邻的 1~6 个位置都查看过了。其他的橙色泡泡都还有相邻的位置没有查看,比如说最下方起点的那个橙色泡泡,其实我们只查看了它的第 1 个相邻的位置,剩余的 2~6 的位置都没有查看。


所以,我们还需要有一个回溯的过程,这个过程就是帮我们查看每一个橙色泡泡周围还没有被查看过的位置。


4a71a81b1760a64631099e48e2b9fe7b.png


经历过这样的一次查找过程之后,我们找到了所有的满足条件泡泡(相同颜色)的泡泡。


b16a7fae9d91f83314b949c2c2523b44.png


根据这个表格我们能够知道一共找到了多少个满足条件的泡泡,另外还有一个非常重要的信息,那就是每一个满足消除条件的泡泡所在的“行列号”信息(即表格的第几行第几列)。根据“行列号”可以在游戏中找到那个唯一的确定的泡泡,有了这些信息我们就能够对那些相同颜色的泡泡进行消除处理了。


最后,我们来看一下泡泡匹配查找算法的积木逻辑。


213462d1f62bae890cb50d2d76dec07b.png


整个查找算法其实是一个递归算法,但是由于目前微信小游戏制作工具不允许使用递归的方式,所以在“泡泡匹配查找1”的函数中,我调用了“泡泡匹配查找2”函数,其实它们俩一模一样,只是使用这种方式来实现了递归。


关于递归以及如何在微信小游戏制作工具中使用递归,可以参考这篇文章。


另外还有一点儿需要注意的是,奇数行和偶数行的泡泡在计算相邻的位置时是有差别的,主要的差别在于上方和下方的相邻位置的计算。


cf586fec1b77578b16b6dcf80e479c99.png


对于查找匹配算法,最难的地方在于理解整个过程,包括如何向前查找,以及如何向后回溯。希望这篇文章的这些图片可以帮助你理解这个过程,只要你能在脑袋中对整个过程有个清晰的了解,那么实现这个查找算法就很简单了。由于当前我使用的积木编程,所以看起来挺长的,如果使用代码的话,也就是二三十行而已。


现在开始,离开你的电脑和手机,拿出纸和笔。如果你能够在纸上复现整个查找过程,那么你对于查找算法的理解就算透彻了。


相信我,这个时间和精力花的绝对超值,因为这意味着你已经打通了任督二脉,你不但掌握了泡泡龙游戏的查找算法,你也掌握了所有消除类型游戏的查找算法。


我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!

相关文章
|
2月前
|
算法
泡泡龙游戏开发实战教程(6):实现连锁消除
泡泡龙游戏开发实战教程(6):实现连锁消除
46 0
|
2月前
|
数据可视化 搜索推荐 开发工具
小蚂蚁的消除游戏系列教程
小蚂蚁的消除游戏系列教程
29 0
|
算法 小程序
如何做一个泡泡龙游戏(六)
嗨!大家好,我是小蚂蚁。 上一节中,我们学习了泡泡龙游戏中的查找算法,这个算法可以帮助我们找到所有相邻的相同颜色的泡泡,在查找完泡泡之后,再通过判断满足条件的泡泡的数量是否大于等于 3,来决定是否应该进行消除。
88 0
|
小程序
如何做个泡泡龙游戏(四)
嗨!大家好,我是小蚂蚁。在上一节中,我们学习了泡泡的发射,移动,反弹和停靠。所有的这些都是以计算的方式来实现的,我们没有选择使用物理,碰撞检测这些方式,因为泡泡龙游戏需要一定的精准性,而通过在每一帧进行计算,可以保证游戏的精准。
92 0
|
小程序 索引
如何做一个泡泡龙游戏(二)
嗨!大家好,我是小蚂蚁。今天我们继续学习制作一个泡泡龙游戏。 绝大部分的泡泡龙游戏都是关卡制的,你玩过了一关,然后接着再玩下一关。每个关卡其实都是预先设计好的,闯关的过程就是游戏将一个一个设计好的关卡呈现给玩家的过程。这些关卡都是怎样设计的呢?游戏又是怎样将这些设计好的关卡呈现出来的呢?欢迎带着这两个疑问开启今天的阅读之旅。
110 0
|
算法 小程序
如何做一个泡泡龙游戏(五)
嗨!大家好,我是小蚂蚁。我们今天来继续学习泡泡龙游戏中最核心的东西:查找匹配算法。 其实这也不算是什么新东西了,如果你有看过我的其它关于消除游戏的教程,应该会知道,消除游戏的查找算法就那么一个,不论何种类型的消除游戏,这个算法的核心是不变的,只不过会根据不同类型的消除稍作调整而已。所以,如果你之前对查找算法还不是很了解的话,那么就尝试跟随着这篇教程把它彻底搞懂吧!
99 0
|
小程序
如何做一个泡泡龙游戏(一)
嗨!大家好,我是小蚂蚁。从今天开始,我将会用几篇文章讲一下如何制作一个泡泡龙游戏,泡泡龙是一个传统经典的消除游戏,也是一个经久不衰永不过时的游戏。 这篇文章我们主要来了解一下如何设置泡泡龙游戏的初始布局。
120 0
|
小程序 流计算
如何做个泡泡龙游戏(三)
嗨!大家好,我是小蚂蚁。今天我们来继续了解在泡泡龙游戏中,泡泡是如何发射,移动,反弹和停靠的。 这一节里会涉及到比较多的数学运算,不过完全不用担心,试着找一张纸和一支笔,画一画,很容易理解的。
110 0
|
算法 索引 容器
如何做一个俄罗斯方块游戏(二)
嗨!大家好,我是小蚂蚁。今天我们继续学习如何做一个俄罗斯方块游戏。整个系列教程计划按照这个流程图开展,这也是我制作整个游戏的过程,今天我们就来看一下“随机生成形状”这个模块。想要实现随机的生成形状,首先必须要知道在俄罗斯方块中一共有多少种形状(也就是我们上一节中留下的第二个问题)。
134 0
|
定位技术 开发者
如何做一个俄罗斯方块游戏(一)
从今天开始,我将开启一个新的游戏,并且顺带着会写一个新的系列教程,这个游戏就是人人都知道的——俄罗斯方块。 我一直都在做消除类型的游戏,在所有消除类型的游戏里,俄罗斯方块可以称得上是“鼻祖”了,所以,不论怎样这个系列里都不能少的了它。
115 0