
引言
哈喽大家好,我是亿元程序员,虽然是春节假期,但是有小伙伴还是非常卷:
大佬你好,我是刚入门的游戏开发新人,打算先做个简单的小游戏练练手。
就是前阵子比较火的俄罗斯方块,不知道合不合适?
俄罗斯方块? 这个游戏非常经典,而且做起来也挺好上手,应该不难,挺合适的。
随后小伙伴发来一张截图:

**啊?流沙版?**卷王果然卷王,一来就上强度。
言归正传 ,本期带大家一起来看看,在Cocos游戏开发中,开发流沙版俄罗斯方块,有哪些关键的点。
本文源工程可在文末获取,小伙伴们自行前往。
什么是流沙版俄罗斯方块?
相信 小伙伴们都认识俄罗斯方块,它有7种不同形状的方块,控制它们旋转、移动和下落,直到填满一整行即可消除得分。
流沙版则是其变种版本:
它的方块落地会像沙子一样流动、散开,同色流沙横向连通左右边界即消除,策略性更强、更解压。
那么,实现流沙版有哪些关键的点?
1.双网格和统一坐标
和传统 的俄罗斯方块一样,方块下落的过程,采用的是"格子"坐标系,例如10*20为10列20行 。

但是 方块落地之后,按照规则会化成比格子更小的"沙粒",于是我们需要再把每个格子分成10*10的100份即100*200为100列200行。

基于以上双网格,我们在处理渲染、碰撞和锁块(固定到棋盘上)时,必须保持两套坐标系的统一,这是整个玩法的数学基础,否则会导致碰撞异常、落地错位等问题。
那在双网格的前提下如何判断发生碰撞?
2.碰撞与锁块
碰撞的检测需要拿当前方块的形状、当前方块的位置,将逐个格子进行计算检测,看格子范围内是否有沙子或者格子是否超出边界。

和人生一样,没有代码的文章是不完整的,核心的碰撞检测的代码如下:

锁块的意思就是当下落的方块落到地面或者其他方块上面时,会固定在网格上,这时候我们需要把移动的方块映射到网格上。

以上的内容最主要就是坐标的计算,通过计算得出映射到的格子即可,俄罗斯方块就可以通过这个原理实现。
那流沙版的效果要怎么实现?
3.沙粒物理
方块锁定之后,需要像沙子一样散落到地面,我们需要通过模拟实现沙粒的物理效果。

实现算法如下:
- 从下往上遍历行,每行随机列序,避免固定顺序带来的偏向。
- 对每个沙粒:正下方空则直接下落;否则看左下、右下是否为空,若都空则随机选一侧,否则选唯一空的一侧,实现「可竖直或斜向下落」的沙粒感。
图解如下:

图解太过抽象,我们可以看下代码:

核心差不多都抽象完了,下面实现一下消除。
4.消除规则
- 内容:按颜色找连通块,只有「同色 + 四连通 + 从左边界连到右边界」的沙粒才会被消除;再配合做闪白再清空。
- 解析:这是得分与清空的核心规则,和「满行消」完全不同:需要同色、横向贯通。规则设计决定了策略深度和难度曲线。
图解如下:

从最左侧一列 开始,逐个颜色,通过4方向(可以扩展成8方向)进行查找,颜色一致则继续查找,直到最右侧。

最后再加个消除的效果即可完成,怎么都是棍子?

5.效果演示

结语
以上就是流沙版俄罗斯方块的关键点,不知道我说明白没有。
小伙伴们入门游戏行业做的第一款游戏都是什么?
本文实战完整源码 已集成到亿元Cocos小游戏实战合集(8/10),内含体验链接,即将上调价格。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐文章: