当前位置:网站首页>消除游戏中宝石下落的原理和实现
消除游戏中宝石下落的原理和实现
2022-08-08 14:55:00 【51CTO】
本文首发于微信公众号【小蚂蚁教你做游戏】,欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。
嗨!大家好,我是小蚂蚁。
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
下落原理

如图,用线画出来的红色宝石是满足消除条件的,它们会被消除,产生空白位置。消除过后,看起来是下面这样。

来观察一下这些空白,在第一列中,有一个空白,将上方的黄色宝石和蓝色宝石同时向下移动一个位置,可以完成填充;第二列中,有连续的两个空白,将上方的黄色宝石和绿色宝石同时向下移动两个位置,可以完成填充;第三列中,有两个不连续的空白,需要将黄色的宝石向下移动一个位置,将绿色的宝石向下移动两个位置,才能完成填充。
在寻找方法的时候,通常我们首先会通过观察来寻找规律,一旦找到了规律,就能很容易找出解决方案。但是对于“宝石下落”来讲,貌似是没有明显的规律的,一列中有几个空白位置?这些空白位置是连续的?还是不连续的?这些貌似都没有规律。
以空白位置为关注点的话,找不到明显的规律。那我们就试着切换一下关注点,关注消除后剩余的宝石。

第一列有两个宝石,第二列两个宝石,第三列有两个宝石......貌似是有点儿规律了。忽略掉空白位置,我们从每一列的下方开始,向上寻找宝石,每找到一个宝石就为它设置一个编号,宝石的编号依次增加。

发现规律了吗?宝石的编号就是它要下落到的位置的行号。

获取表格中的一列,然后从下向上依次检查每个格子,空白位置跳过,如果格子里有宝石,就为这个宝石设置一个编号,编号依次增加 1,这样检查完一列之后,下落宝石的目标位置就知道了。接着,像这样检查表格中的每一列,当所有的剩余宝石都编号完成后,再统一进行下落处理。
这个就是宝石下落的实现原理了。
下落实现
首先创建 3 个列表,一个用于为宝石设置编号,一个用于记录哪些宝石需要下落,一个用于记录下落宝石的下落目标位置。
接着,来看一下下落的积木逻辑。


这里有一点儿可能比较难理解,就是如何使用一个列表来记录宝石的编号。

如图,以第一列为例,从下向上依次查看每一个格子,第一个格子是空白位置,跳过。第二个格子有宝石,将第二个格子的宝石的索引加入到列表中(列表的第一个位置),接着第三个格子有宝石,将第三个格子的宝石的索引加入到列表中(列表的第二个位置)。检查完一列后,在最终的列表中,项的内容是要下落方块的索引,位于第几项,就是下落方块的目标位置行号。
最后,再来看一下宝石上的下落处理积木。

收到通知后,首先判断一下自己是否需要下落,如果需要的话,更新的自己的行号和索引,更新网格数据表格中的数据,最后将自己向下移动到新位置上。
最后,来看一下下落的效果。

以上就是下落的原理和方法了,基本上适用于所有需要进行下落处理的消除游戏。
在寻找解决方法时,我们首先关注的是空白位置,发现空白位置找不到规律后,我们转换了一下角度,关注剩余的宝石,最后找到了解决方案。
这或许能给我们带来一点儿启发。在寻找解决方案的时候,如果一个方向行不通,就不妨换个方向,很可能在转换方向之后,问题就变得清晰明了容易解决了。
欢迎关注小蚂蚁的微信公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。

边栏推荐
猜你喜欢

Iptables防火墙iprange模块扩展匹配规则

(1)通过FlinkSQL将数据写入mysql demo

Install Update(Patches) on ESXi

kali换源详细步骤

Notes on the development of kindergarten enrollment registration system based on WeChat applet

Redis RDB分析系统

2022-08-07 第五小组 顾祥全 学习笔记 day31-集合-Map集合

shell------常用小工具,sort,uniq,tr,cut

连这几个网站都不知道,怪不得你的消息比别人落后

如何选择ui设计机构
随机推荐
CS231n:6 训练神经网络(三)
JS-BOM-Name Converter - Input Name Position Reversed
token系统讲解及过期处理
深度学习中的常见正则化方法(Regularization)以及优化器中的WeightDecay参数详解
一万块钱能做一手尿素期货吗?尿素期货怎么做才安全?
基于微信小程序的幼儿园招生报名系统开发笔记
【小码匠自习室】CSP-J/S复试高分秘诀经验分享
5G NR RRC连接控制
【小码匠自习室】让错误成为孩子进步的阶梯
AT2382-[AGC015D]A or...or B Problem
文献阅读_VistaNet:用于多模式情绪分析的视觉方面注意网络
Redis RDB分析系统
See how three years of CRUD programmers solve database deadlocks
超详细的最新版 2022.2 kali 安装步骤及拍摄快照的方法
【小码匠自习室】ABC084 - D:喜欢这样的大神,超有才华
PHP —— CI 框架实现微信小程序支付
【小码匠自习室】朋友的朋友不是朋友
领域驱动设计系列贫血模型和充血模型
sqoop连接MySQL跟本机不一致是为什么
RecyclerView 实现拖拽、滑动删除