当前位置:网站首页>消除游戏中宝石下落的原理和实现
消除游戏中宝石下落的原理和实现
2022-08-08 14:55:00 【51CTO】
本文首发于微信公众号【小蚂蚁教你做游戏】,欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。
嗨!大家好,我是小蚂蚁。
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
下落原理
如图,用线画出来的红色宝石是满足消除条件的,它们会被消除,产生空白位置。消除过后,看起来是下面这样。
来观察一下这些空白,在第一列中,有一个空白,将上方的黄色宝石和蓝色宝石同时向下移动一个位置,可以完成填充;第二列中,有连续的两个空白,将上方的黄色宝石和绿色宝石同时向下移动两个位置,可以完成填充;第三列中,有两个不连续的空白,需要将黄色的宝石向下移动一个位置,将绿色的宝石向下移动两个位置,才能完成填充。
在寻找方法的时候,通常我们首先会通过观察来寻找规律,一旦找到了规律,就能很容易找出解决方案。但是对于“宝石下落”来讲,貌似是没有明显的规律的,一列中有几个空白位置?这些空白位置是连续的?还是不连续的?这些貌似都没有规律。
以空白位置为关注点的话,找不到明显的规律。那我们就试着切换一下关注点,关注消除后剩余的宝石。
第一列有两个宝石,第二列两个宝石,第三列有两个宝石......貌似是有点儿规律了。忽略掉空白位置,我们从每一列的下方开始,向上寻找宝石,每找到一个宝石就为它设置一个编号,宝石的编号依次增加。
发现规律了吗?宝石的编号就是它要下落到的位置的行号。
获取表格中的一列,然后从下向上依次检查每个格子,空白位置跳过,如果格子里有宝石,就为这个宝石设置一个编号,编号依次增加 1,这样检查完一列之后,下落宝石的目标位置就知道了。接着,像这样检查表格中的每一列,当所有的剩余宝石都编号完成后,再统一进行下落处理。
这个就是宝石下落的实现原理了。
下落实现
首先创建 3 个列表,一个用于为宝石设置编号,一个用于记录哪些宝石需要下落,一个用于记录下落宝石的下落目标位置。
接着,来看一下下落的积木逻辑。
这里有一点儿可能比较难理解,就是如何使用一个列表来记录宝石的编号。
如图,以第一列为例,从下向上依次查看每一个格子,第一个格子是空白位置,跳过。第二个格子有宝石,将第二个格子的宝石的索引加入到列表中(列表的第一个位置),接着第三个格子有宝石,将第三个格子的宝石的索引加入到列表中(列表的第二个位置)。检查完一列后,在最终的列表中,项的内容是要下落方块的索引,位于第几项,就是下落方块的目标位置行号。
最后,再来看一下宝石上的下落处理积木。
收到通知后,首先判断一下自己是否需要下落,如果需要的话,更新的自己的行号和索引,更新网格数据表格中的数据,最后将自己向下移动到新位置上。
最后,来看一下下落的效果。
以上就是下落的原理和方法了,基本上适用于所有需要进行下落处理的消除游戏。
在寻找解决方法时,我们首先关注的是空白位置,发现空白位置找不到规律后,我们转换了一下角度,关注剩余的宝石,最后找到了解决方案。
这或许能给我们带来一点儿启发。在寻找解决方案的时候,如果一个方向行不通,就不妨换个方向,很可能在转换方向之后,问题就变得清晰明了容易解决了。
欢迎关注小蚂蚁的微信公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。
边栏推荐
- Common regularization methods in deep learning (Regularization) and detailed explanation of WeightDecay parameters in optimizers
- 面试官:Redis 大 key 要如何处理?
- Create a 2D array
- 依赖传递和依赖调解
- 我凭借这份pdf成功拿到了阿里,腾讯,京东等六家大厂offer
- shell------常用小工具,sort,uniq,tr,cut
- Redis RDB分析系统
- Brief description of the state of the thread
- JS - BOM - - can be achieved through calculation or default values
- Notes on the development of kindergarten enrollment registration system based on WeChat applet
猜你喜欢
随机推荐
深度学习-神经网络原理1
兆骑科创创业赛事活动举办平台,投融资对接,线上直播路演
【小码匠自习室】 [NOI Online 2022 入门组] 王国比赛
想要精准营销,从学习搭建一套对的标签体系开始丨 DTVision 分析洞察篇
我凭借这份pdf成功拿到了阿里,腾讯,京东等六家大厂offer
JS-BOM-通过或运算-可以实现缺省值
第一章、RPC 基础知识
MySQL清除表数据 id重置
JS - BOM - - can be achieved through calculation or default values
See how three years of CRUD programmers solve database deadlocks
【小码匠自习室】让错误成为孩子进步的阶梯
如何成为团队核心?从写出不可维护的代码开始
【LeetCode】761. Special binary sequence
Is it safe to open an account in China Galaxy Securities?
面试题 17.05. 字母与数字
「PHP基础知识」检测数据类型
Notes on the development of kindergarten enrollment registration system based on WeChat applet
有了国产 DevOps 工具 ,还怕数字化转型成本高?
[内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取
kali换源详细步骤