从零开始做一个俄罗斯方块游戏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 个形状为例,假设每一个小方块的大小都是 50×50,以形状的中心为坐标轴的中心,那么很容易就可以计算出 4 块小方块的具体位置。

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

这里注意一下,当我们将 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 个形状,以及每个形状所包含的不同状态,最后了解了两种不同的随机算法。

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

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年8月6日
下一篇 2022年8月6日

相关推荐

  • 大灭绝鸟类怎么活下来的?《方舟生存进化》就能演示这一过程

    距离今天约6500万年之前,一颗巨大的陨石落下,把恐龙一族彻底的湮灭在了这颗星球之上,可奇怪的是,和恐龙们生活在同一时代的各种鸟类依旧存活了下来,为何会发生这种事情呢?从Steam…

    2022年6月29日
  • 挑战999连击!《时空猎人3》速成格斗大神小技巧揭秘

    如果你问我,什么是横版格斗手游里,最能证明自己技术水平的证据,那我会告诉你,连击,一般来说大伙在讨论格斗手游的时候,围绕的话题,无非就是连招、无伤诸如此类的技术问题。 在传统的1V…

    2022年7月2日
  • 腾讯为什么没能造创造出《原神》这样的游戏?

    回答这个问题之前,我们不妨想一想,腾讯在中国游戏界的地位,在一系列风靡全国乃至世界的CF,LOL等的带领下,kan。 那为什么腾讯没能做出原神这款游戏反而让米哈游后来居上了呢? 要…

    2022年7月27日
  • Docker 使用笔记

    mac下安装Docker brew cask install docker 启动docker:进入launchpad,双击docker图标即可启动 Linux下安装Docker h…

    2022年6月24日
  • 开罗模拟经营游戏《闪耀滑雪场物语》现已上线steam

    开罗模拟经营游戏《闪耀滑雪场物语》现已上线steam,发售时间待定,支持中文。游戏中,玩家可以建设度假旅馆与滑雪场,进行经营的模拟经营游戏。目标是成为黄金时代的滑雪场 尽情享受足浴…

    2022年8月1日
  • 本周最佳|硬汉大赛,成为枪战的绝对赢家

      射击游戏的类型可以说是“百花齐放、大逃杀、罗格里克、求生等。”,而且几乎大部分玩法都可以结合射击游戏。此次,《暗区突围》还将生存、探索等游戏融入射击游戏,让玩家在生存和战斗的双…

    2022年8月24日
  • 监听玩家语音的拳头与被侵犯隐私的玩家

    他监听我,我是不是该谢谢他? 6月24日,拳头游戏在《无畏契约》(Valorant)的官网上发布了一则公告。这则公告的内容不长,受到《无畏契约》在国内热度的影响,也没有多少玩家讨论…

    2022年7月9日
  • 上单曾被Ale打成2-8!DK官宣大名单:王牌中野组合留队

    大家好,这里是锦城,给大家带来英雄联盟电竞圈的最新资讯。 DK战队早早宣布将在下午四点直播里公布S12新赛季的大名单,此前早已有韩媒记者爆料了中野组合ShowMaker和Canyo…

    2022年6月30日
  • 太意外!总分311,伊藤美诚不敌芝田沙季无缘四强

    8月13日,日本T联赛继续进行,而这次的比赛,和巴黎奥运会的资格挂钩,所以运动员在赛场上都拼得很凶! 此前的T联赛,伊藤美诚根本不屑于参赛,但是由于今年的T联赛有奥运积分,所以伊藤…

    2022年8月15日
  • 托卡建筑师 攻略

    托卡建筑师是一款趣味十足的模拟建造类休闲益智游戏,这款游戏不仅延续了托卡游戏系列的精髓。而且还采用可爱精致的卡通画面和高度自由的游戏玩法来致力于开发玩家的想象力和创造力,同时在游戏…

    2022年6月30日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息