俄罗斯方块游戏开发实战教程(2):随机创建不同的形状

简介: 俄罗斯方块游戏开发实战教程(2):随机创建不同的形状

嗨!大家好,我是小蚂蚁。今天我们继续学习如何做一个俄罗斯方块游戏。



整个系列教程计划按照这个流程图开展,这也是我制作整个游戏的过程,今天我们就来看一下“随机生成形状”这个模块。


创建形状


想要实现随机的生成形状,首先必须要知道在俄罗斯方块中一共有多少种形状(也就是我们上一节中留下的第二个问题)。



如图,就是俄罗斯方块中所有的 7 个形状了,试着观察一下这七个形状有一个共同点。那就是每个形状都是由 4 个小方块组成,这是一个很重要的特征,这就意味着你只需要 4 个小方块,就可以通过调整摆放位置,构建出游戏中的所有形状了。


对于游戏中的形状来说,除了需要知道都有哪些之外,我们还需要另外一些信息,就是每一个形状有多少“状态”可以变换。



如图,是 7 种形状的变换,形状 1~3 分别有 4 个状态,形状 4~6 分别有 2 个状态,形状 7 只有 1 个状态。

这里我们把形状的每一个不同的旋转位置叫做一个“状态”,以第 1 个形状为例,它一共有 4 个状态,第 1 个状态是“T”型,第 2 个状态就是第 1 个状态以顺时针旋转 90 度,第 3 个状态是第 2 个状态以顺时针旋转 90 度,第 4 个状态是第 3 个状态以顺时针旋转 90 度。第 4 个状态再以顺时针旋转 90 度,就回到了第 1 个状态。整个状态切换是一个首尾相接的循环过程,每一个状态都是以上一个状态为基础,顺时针旋转 90 度。

你可以继续观察一下剩余的其他形状,看看每一个形状的状态是否都满足上述的条件。


在确定了形状之后,我们如何在游戏中把它们构建出来呢?答案其实很简单,直接拼出来就好了。


以第 1 个形状为例,假设每一个小方块的大小都是 50x50,以形状的中心为坐标轴的中心,那么很容易就可以计算出 4 块小方块的具体位置。



在得到了 4 个小方块的位置之后,我们可以在微信小游戏制作工具中将 4 个小正方形(50x50)打包到一个容器中,然后分别为它们设置到对应的位置上,这样一个形状就创建好了。




这里注意一下,当我们将 4 个小方块打包成容器“形状1”之后,这个容器整体是一个矩形,中点位于矩形的中心,这个中心也表示容器“形状1”的位置。例如,将“形状1”容器设置到(0,0)的位置,实际上是容器的中心点位于 (0,0) 的位置(这个在后续计算中需要用到,这里先了解一下)。


剩余其它的几个形状也如此,可以先在纸上画一下,计算出每个小方块的位置,然后再在制作工具中创建出对应的形状。


随机


形状创建好了,接着我们来看一下如何进行随机。目前对于俄罗斯方块的随机有很多种方式,这里我们只说一下其中的两种,一种是最古老的随机,另一种是用的比较多的叫做“Bag7”的随机。


最古老的随机其实就是每次生成的方块都是从 1~7 个形状中随机的生成一个。由于每次生成都是随机的,所以有可能出现连续多次生成同一种形状,或者连续很多次都不生成某一种形状的情况,这些情况会导致游戏难度的增加。


这种随机很简单,我们只需要从 1~7 中,生成一个随机数,然后根据这个随机数生成指定的形状即可。



后来,为了降低游戏的难度,普遍采用了叫做“Bag7”的随机方法。就是生成一个由 1~7 的 7 个数字随机排序组成的包(列表或者数组),然后按照这个包中的排序生成形状,生成 7 个形状后,就再创建一个这样的包,然后再继续。


这种算法保证了同一个形状最多只能连续出现 2 次(前一个包的最后一个数,跟后一个包的第一个数相同)。同一个形状最多只能间隔 12 次不出现(前一个包的第一个数,跟后一个包的最后一个数相同)。



接着,我们来看一下“Bag7”随机算法的实现。首先,我们创建一个叫做“Bag7”的列表,这个列表中包含了 1~7 的 7 个数字。



接着来看一下积木逻辑。



微信小游戏制作工具为我们提供了一个“将列表随机打乱”的积木块,我们可以直接利用它来得到打乱了顺序的列表(Bag7)。每当生成一个形状后,就将变量“Bag7索引”增加 1,直到这个列表中的所有项遍历完毕,然后再继续生成下一个新的“Bag7"。


好了,今天的内容就到这里了,稍微总结一下:我们了解了俄罗斯方块中的 7 个形状,以及每个形状所包含的不同状态,最后了解了两种不同的随机算法


是不是有种“哇哦~”的感觉?这么简单的一个俄罗斯方块游戏竟然能够包含这么多的东西。所以说即使是一个小游戏,只要你用心研究,里面也包含着很多可以学到的东西。更何况,我们的这个小游戏才刚刚开始而已。

相关文章
|
3月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
236 0
|
6月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
152 2
|
6月前
俄罗斯方块游戏开发实战教程(3):玩家如何控制形状
俄罗斯方块游戏开发实战教程(3):玩家如何控制形状
77 1
|
6月前
俄罗斯方块游戏开发实战教程(5):形状碰撞检测(下)
俄罗斯方块游戏开发实战教程(5):形状碰撞检测(下)
106 1
|
6月前
|
开发工具
俄罗斯方块游戏开发实战教程(4):形状碰撞检测(上)
俄罗斯方块游戏开发实战教程(4):形状碰撞检测(上)
86 1
|
6月前
俄罗斯方块游戏开发实战教程(6):形状停靠
俄罗斯方块游戏开发实战教程(6):形状停靠
44 0
|
6月前
俄罗斯方块游戏开发实战教程(7):消除判断和处理
俄罗斯方块游戏开发实战教程(7):消除判断和处理
73 0
|
6月前
塔防游戏开发实战教程(3):创建不同类型的敌人
塔防游戏开发实战教程(3):创建不同类型的敌人
175 0
|
容器
微信小游戏开发实战10-检查形状
本篇主要内容:1010游戏中的形状检查以及游戏结束的判断。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
105 0
微信小游戏开发实战10-检查形状
|
存储 算法 Serverless
游戏开发实战教程(12):随机生成形状功能的实现
在游戏的下方存在 3 个形状槽,每个形状槽中都会随机的产生一种形状。我们可以通过设置不同类型的形状的生成概率来调整游戏的难度,例如 1,8 两种类型的形状出现的概率高的话,游戏的难度就会增大。反之,难度就会减小。 下面,我们就来实现一下如何根据设定的概率随机的生成形状。
109 0
下一篇
无影云桌面