泡泡龙游戏开发系列教程(六)
嗨!大家好,我是小蚂蚁。
上一节中,我们学习了泡泡龙游戏中的查找算法,这个算法可以帮助我们找到所有相邻的相同颜色的泡泡,在查找完泡泡之后,再通过判断满足条件的泡泡的数量是否大于等于 3,来决定是否应该进行消除。
这是泡泡停靠后的查找和消除的过程,但是这只是消除过程的一部分,还有另一部分需要处理。
来看一下上方这张图,发射一个蓝色的泡泡,这个蓝色的泡泡停靠后,通过查找算法,找到了它右侧的两个相同的蓝色泡泡,因为数量满足了 3 个,所以这 3 个蓝色泡泡会进行消除。
3 个蓝色泡泡被消除了之后,就成了上面图中的样子,剩下了 3 个“悬空”的泡泡。而我们知道这是不对的,在一个正常的泡泡龙游戏中,是不会有“悬空”的泡泡的,下方的这 3 个泡泡也应该被消除。
我们暂且把这个叫做“连锁消除”吧!因为上方的与它连接的泡泡被消除了,所以它也应该顺带着进行消除。
“连锁消除”应该如何去处理呢?我们仍然需要使用之前学过的查找算法,只是这次查找的起点不再是停靠的泡泡,而是最上方第一行的所有泡泡。
还是先把泡泡进行一下数据抽象,不同的颜色对应的不同的数字,空的位置对应的是 0 。如图,下方 3 个“悬空”泡泡的上方的蓝色泡泡都是 0 ,因为它们满足消除条件,被消除了,所以这里成了空位置(设置为 0)。
我们以第一行的第一个泡泡为起点开始查找,依次查看与它相邻的泡泡,只要相邻的泡泡不是 0 ,那么就以它为新的起点继续查找。具体的查找步骤我们在上一节中已经演示过了,在此就不多讲了。
总之,经过了所有的查找之后,所有上方的 3 行泡泡都能够被找到。剩余的泡泡,也就是下方的 3 个“悬空”的泡泡,因为中间被 0 个隔开了,所以无法查找的到。
经过这一轮的查找之后,我们找到了所有不应该消除的泡泡,反之,没有被找到的那些就是应该被消除的泡泡。
这里有一个需要注意的地方,就是我们要依次的以第一行的每一个泡泡为起点进行查找,这样才能够找到所有不能消除的泡泡。上方举的例子由于前 3 行都是满的,所以理论上以其中任何一个泡泡为起点进行查找,都能够找到所有前 3 行的泡泡。但是不要忘了,还有下方这样的情况。
如果只以第 1 行第 1 个泡泡为起点进行查找的话,那就只能找到左上方的 4 个泡泡,找不到右侧的这些泡泡了。所以整个遍历查找的过程是依次以第 1 行的每一个泡泡为起点进行遍历查找,直到查找完所有的泡泡。
来看一下这个“连锁查找”的积木逻辑。
跟之前的查找算法一样,都是使用递归查找,唯一的区别是,只要相邻的泡泡不是 0 ,就满足查找条件。
最后,来看一下全部两次查找过程的积木逻辑。
第一次查找以停靠的泡泡为起点,目的是找到所有与它相邻的颜色相同的泡泡。第二次查找是依次以第一行的每一个泡泡为起点,目的是找到所有的需要进行“连锁”消除的泡泡(没被找到的就是要被消除的)。
预览一下,看看消除以及连锁消除。
红色的泡泡满足消除条件被消除,下方的黄色泡泡因为失去了连接,也顺带被连锁消除了。
我们用了两篇文章来讲泡泡龙游戏消除的两个过程,其实这两个过程使用的是几乎一样的查找算法,只不过是起点和判断条件有些差异。这些东西就是一个消除游戏中的核心查找算法了,如果你能够详细清楚的了解这整个过程,就会发现很多的消除游戏都大同小异,不信就找几个不同类型的消除游戏来看一看,测试一下你是否具备了一双能够洞悉游戏表象,看穿其本质的眼睛。
表象的世界总是千变万化,内在的实质却依旧始终如一。
我是会做游戏也会教你做游戏的小蚂蚁,想学做游戏的话关注我就对了。欢迎关注公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。
泡泡龙游戏开发系列教程(六)相关推荐
- unity2d游戏开发系列教程:四、一个2D游戏所需要的主要功能(游戏框架)
目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 unity2d游戏开发系列教程:三.场景布置,增加怪物和机关 原文下载 ...
- unity2d游戏开发系列教程:三、场景布置,增加怪物和机关
目录 unity2d游戏开发系列教程:一.环境安装 unity2d游戏开发系列教程:二.新建工程并熟悉Unity编辑器常用功能 第一节.场景草地布置 先查看一下资源文件里都有什么,一会就要用到的 打开 ...
- HTML5游戏开发系列教程5(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-5/ 最终我决定准备下一篇游戏开发系列的文章,我们将继续使用can ...
- unity2d游戏开发系列教程:一、环境安装
从这篇文章开始,一步一步教大家从0开始通过2DGameKit项目进行2D游戏开发 第一步.环境安装 1.先使用手机下载Unity Connect并注册登陆 2.进入unity官网https://uni ...
- unity2d游戏开发系列教程:二、新建工程并熟悉Unity编辑器常用功能
目录 unity2d游戏开发系列教程:一.环境安装 第一步.打开项目 耐心等待一小会 工程界面 第二步.创建第一个场景(第一关)进行试玩 点击图中标号1的运行按钮,即可简单试玩感受,操作如下 移动A, ...
- 2d unity 多物体 射线_24小时入门Unity游戏开发系列教程
版权声明: 本系列教程来自Unity Game Development in 24 Hours, Sams Teach Yourself(出版日期:2013年12月6日) 教程内容仅供个人学习参考,版 ...
- UE4游戏开发系列教程之————world machine地编教程
写在前面,我写这篇教程原因还是今年的年假太长了~~~自己在家闲着无聊,就继续做我"独立3A游戏"的梦.我从一开始的unity3d转战到了UE4.因为Unity3D的表现力实在有待提 ...
- [cocos2d-x]游戏开发系列教程-搭建cocos2d-x的windows开发环境
1.在上一篇中我们成功运行了HelloCpp和TestCpp工程,我们到目录cocos2d-x-2.2.1\Debug.win32下 查看生成的文件,在我电脑上绝对路径是H:\source\cocos ...
- cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...
- cocos2d x游戏开发系列教程 中国象棋01 工程文件概述
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 上一篇博 ...
最新文章
- 大学python和vb哪个简单-vb和python哪个速度快
- Java Integer于Int 进行==双等于的内存比较时的一些问题说明
- beyond compare类似软件_BIM工作是什么?需要哪些BIM软件来完成?
- 人脸识别的过程和算法
- 处理下载文件时中文乱码
- Web Components 系列(五)—— 详解 Slots
- 总结(5)--- Numpy和Pandas库常用函数
- Failed to decrypt protected XML node DTS:Property with error 0x8009000B 错误的解决
- 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进的阈值高斯脉冲信号去噪【含Matlab源码 1706期】
- a0图框标题栏尺寸_机械制图标准中规定的标题栏尺寸
- 开发人员的十种必备工具
- Linux的man中文帮助手册
- windchill 系统客制角色
- Norgen AAV提取剂盒说明书(含特色)
- redis存10万条数据_redis如何存储数据
- Python基本数据类型--列表
- 2008欧锦赛 球员名单 A组
- 【计算机基础04】Excel知识
- Linux内核中__u16、__u32、__u64和size_t的理解
- 电子计算机机房设备接地线,电子计算机机房的防雷接地措施
热门文章
- 关于安装软件时x86 ,x64,x86_64,ARM 64, ARM 32 的选择
- matlab矩阵怎么进行相加,matlab矩阵如何运算相加
- 从一个方向看一个正方体_从一个方向观察一个正方体,最多可以看到几个面
- 面试官:请实现单行文本居中,多行文本左对齐?
- 【贪玩巴斯】数据仓库与数据挖掘(五)——「数据仓库项目的设计过程和开发团队介绍」2021-10-26
- autojs开发的多功能工具箱,源码量大慢慢消化,功能非常多
- 原始套接字Raw Socket基础-- WSADATA wsaData(转)
- 添加打印机,本地打印后台处理程序服务没有运行
- 计算机win7如何加快开机速度,Win7系统如何提高开机速度?提高开机速度的三种方法步骤...
- (构造笔记)GRASP学习心得