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

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

先来看一张图片。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

泡泡龙游戏开发系列教程(五)相关推荐

  1. unity2d游戏开发系列教程:四、一个2D游戏所需要的主要功能(游戏框架)

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 unity2d游戏开发系列教程:三.场景布置,增加怪物和机关 原文下载 ...

  2. unity2d游戏开发系列教程:三、场景布置,增加怪物和机关

    目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 第一节.场景草地布置 先查看一下资源文件里都有什么,一会就要用到的 打开 ...

  3. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  4. HTML5游戏开发系列教程5(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...

  5. unity2d游戏开发系列教程:一、环境安装

    从这篇文章开始,一步一步教大家从0开始通过2DGameKit项目进行2D游戏开发 第一步.环境安装 1.先使用手机下载Unity Connect并注册登陆 2.进入unity官网https://uni ...

  6. unity2d游戏开发系列教程:二、新建工程并熟悉Unity编辑器常用功能

    目录 unity2d游戏开发系列教程:一.环境安装 第一步.打开项目 耐心等待一小会 工程界面 第二步.创建第一个场景(第一关)进行试玩 点击图中标号1的运行按钮,即可简单试玩感受,操作如下 移动A, ...

  7. 2d unity 多物体 射线_24小时入门Unity游戏开发系列教程

    版权声明: 本系列教程来自Unity Game Development in 24 Hours, Sams Teach Yourself(出版日期:2013年12月6日) 教程内容仅供个人学习参考,版 ...

  8. UE4游戏开发系列教程之————world machine地编教程

    写在前面,我写这篇教程原因还是今年的年假太长了~~~自己在家闲着无聊,就继续做我"独立3A游戏"的梦.我从一开始的unity3d转战到了UE4.因为Unity3D的表现力实在有待提 ...

  9. [cocos2d-x]游戏开发系列教程-搭建cocos2d-x的windows开发环境

    1.在上一篇中我们成功运行了HelloCpp和TestCpp工程,我们到目录cocos2d-x-2.2.1\Debug.win32下 查看生成的文件,在我电脑上绝对路径是H:\source\cocos ...

  10. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

最新文章

  1. [WCF编程]1.WCF入门示例
  2. 选择加冒泡排序法与找鞍马之总结与感受
  3. 【转】解决多文件编译中连接错误 multiple definition of*****
  4. 监听以太网(二) Packet32包说明
  5. 剑指offer面试题58 - I. 翻转单词顺序(双指针)
  6. 【转】Element-UI中上传的action地址相对问题
  7. Ubuntu18.04 wineQQ完美配置(解决不能输入中文、不能加载头像和图片、企鹅图标不能进入托盘任务栏等问题,附deepin-wine、微信、QQ安装包网盘链接)
  8. 详解LCD1602液晶显示屏的使用
  9. matlab 汽车 仿真,MATLAB编程与汽车仿真应用
  10. cobar mysql_mysql分布式中间件cobar
  11. 面试方法-麦可利兰的能力素质模型
  12. 学生机房虚拟化(十二)搭建Clonezilla SE
  13. python中from import_Python中的import和from import
  14. php直播表情美颜的实现,如何在直播中实现优质的美颜SDK效果
  15. 抖音美妆账号一条视频涨粉14.2w,合适刚玩短视频的你丨国仁网络
  16. R Studio 安装stringi 报错download of package ‘stringi’ failed
  17. 基于Winnow的中文邮件分类器的设计
  18. 软件培训机构的网络营销那点事儿
  19. 垃圾邮件检测_如何在您的电子邮件中检测垃圾邮件
  20. 科学计算机里怎样输入分数,怎样在卡西欧计算器上输入分数

热门文章

  1. iPhone手机越狱不只是为了安装盗版应用、越狱的十大好处
  2. matlab 矩阵分行标准化,matlab矩阵标准化
  3. cmos电路多余输入端能否悬空_CMOS电路多余输入端悬空,会造成逻辑混乱,该如何处理?...
  4. 访问计算机需要用户名密码,访问局域网电脑提示需要用户名和密码该怎么办
  5. 制造业英文简写中文对照之二(轉自ITPUB)
  6. 摄像头视场角-对角线视场角-水平视场角
  7. 怎样让机器有人类思维
  8. DirectX11程序从VS2010转到VS2015的配置与使用
  9. WORD中图、表、公式自动编号及制表位、尾注的应用
  10. 货币银行学重点内容复习