嗨!大家好,我是小蚂蚁。我们今天来继续学习泡泡龙游戏中最核心的东西:查找匹配算法。
其实这也不算是什么新东西了,如果你有看过我的其它关于消除游戏的教程,应该会知道,消除游戏的查找算法就那么一个,不论何种类型的消除游戏,这个算法的核心是不变的,只不过会根据不同类型的消除稍作调整而已。所以,如果你之前对查找算法还不是很了解的话,那么就尝试跟随着这篇教程把它彻底搞懂吧!
先来看一张图片。
如图,最下方的这个橙色的泡泡是发射过来的泡泡。泡泡龙游戏的规则是,当发射的泡泡停靠后,只要有三个或者三个以上的颜色相同的泡泡,就满足消除条件,就将它们消除。所以图中左下方的 7 个橙色的泡泡满足消除条件,可以进行消除。
这是我们通过眼睛直接看到的结果,但是对于计算机来讲,它无法直接看出来结果(在这方面计算机还是比较笨的)。所以,我们需要为它设置一个算法,让计算机能够通过这个算法找到我们眼睛所看到的结果。
计算机并不擅长直接处理颜色,它所擅长处理的是数据,所以我们需要先帮它把这个泡泡龙游戏“翻译”一下。
这个“翻译”还有一个名字叫做数据抽象,我们在第二节中已经讲过了,忘记的话可以去回顾一下。
右侧的这个数据表格是查找算法的基础,整个查找算法都是在这张数据表格中进行的。
在开始查找算法之前,我先简单的描述一下整个查找过程:以当前停靠的泡泡为起点,查看周围所有与它相邻的泡泡,如果发现周围有相同颜色(数字相同)的泡泡,那么就以这个泡泡为起点,继续查看其周围相邻的泡泡.....一直重复这个过程,直到周围不再有相邻的泡泡为止。最终已找到的所有颜色相同的泡泡就是满足条件的泡泡了。
上面这个过程并不好理解,不过没关系,你只需要对它有个印象,然后带着这个印象来看接下来的图片。
在正式开始之前,我们要先了解一下,相邻的泡泡都有哪些。
如图,周围的橙色的泡泡都是相邻的泡泡,这里我们约定在查找时,以左上角的泡泡为开始,顺时针进行查找相邻的泡泡。
接着,我们就一步一步的来看整个查找的过程。
至此,我们的查找过程到达了尽头,也就是说当前这个泡泡周围的 6 个位置都没有相同的泡泡了(要么是已找过,要么是空位置,要么是不同)。
整个查找算法到这里算是完成了一部分了,什么?还没有结束?当然了。在所有的橙色泡泡中,目前只有最后的一个泡泡相邻的 1~6 个位置都查看过了。其他的橙色泡泡都还有相邻的位置没有查看,比如说最下方起点的那个橙色泡泡,其实我们只查看了它的第 1 个相邻的位置,剩余的 2~6 的位置都没有查看。
所以,我们还需要有一个回溯的过程,这个过程就是帮我们查看每一个橙色泡泡周围还没有被查看过的位置。
经历过这样的一次查找过程之后,我们找到了所有的满足条件泡泡(相同颜色)的泡泡。
根据这个表格我们能够知道一共找到了多少个满足条件的泡泡,另外还有一个非常重要的信息,那就是每一个满足消除条件的泡泡所在的“行列号”信息(即表格的第几行第几列)。根据“行列号”可以在游戏中找到那个唯一的确定的泡泡,有了这些信息我们就能够对那些相同颜色的泡泡进行消除处理了。
最后,我们来看一下泡泡匹配查找算法的积木逻辑。
整个查找算法其实是一个递归算法,但是由于目前微信小游戏制作工具不允许使用递归的方式,所以在“泡泡匹配查找1”的函数中,我调用了“泡泡匹配查找2”函数,其实它们俩一模一样,只是使用这种方式来实现了递归。
关于递归以及如何在微信小游戏制作工具中使用递归,可以参考这篇文章。
另外还有一点儿需要注意的是,奇数行和偶数行的泡泡在计算相邻的位置时是有差别的,主要的差别在于上方和下方的相邻位置的计算。
对于查找匹配算法,最难的地方在于理解整个过程,包括如何向前查找,以及如何向后回溯。希望这篇文章的这些图片可以帮助你理解这个过程,只要你能在脑袋中对整个过程有个清晰的了解,那么实现这个查找算法就很简单了。由于当前我使用的积木编程,所以看起来挺长的,如果使用代码的话,也就是二三十行而已。
现在开始,离开你的电脑和手机,拿出纸和笔。如果你能够在纸上复现整个查找过程,那么你对于查找算法的理解就算透彻了。
相信我,这个时间和精力花的绝对超值,因为这意味着你已经打通了任督二脉,你不但掌握了泡泡龙游戏的查找算法,你也掌握了所有消除类型游戏的查找算法。
我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!