嗨!大家好,我是小蚂蚁。
在上一篇中我们讲到所有消除游戏(严格来讲是所有的非纯物理的消除游戏)的背后都有一张看不见的“网格”,这张“网格”是一个消除游戏的基础,有了它才有了行列式的布局,你才能够把指定的元素(图标)放置在指定的位置上,就像下面这样。
在有了这样的基础之后,我们下一步是不是就可以开始实现各种各样的操作,去进行消除啦?且慢,在处理各种操作进行消除之前,我们还需要理解一个东西,那就是所有消除游戏背后那些看不见的“数字”。
作为一个游戏制作者,你应该对自己有更高的要求,除了看见玩家所能看到的东西,也需要具备一双可以洞穿游戏的眼睛,看到那些玩家看不到的东西。除了看见那张“网格”,还需要再进一步,看见那张网格上面的数据。
如图,这是一个典型的三消游戏的样子。一个 6 x 6 的布局,共包含 4 种不同的元素。
任意交换相邻的两个元素,交换后,如果在水平或者竖直方向上满足相邻的至少 3 个元素相同这一条件,就消除这些元素。因为规则是满足 3 个相同的元素即可消除,所以又被称作是“三消”。
下面用你的眼睛扫描一下上方这个三消游戏的图片,看到那个“网格”了吗?(没看到的话证明你的“游戏创作者之眼”没有修炼好,请回顾一个上篇文章,继续修炼一下)。
如果你的“游戏创作者之眼”修炼合格的话,你应该是可以看到下方的这张“网格”的,一个 6 行 6 列的网格,上方的那些消除游戏中的图标一个一个老老实实的按照这样的布局安放到每一个格子中。
接着,我们在看见“网格”的基础上,再进一步。
如图,网格中不再是空空如也了,而是填满了数字。这些数字是根据什么来填的呢?看一下右侧,我们用 1 表示黄色的正方形,2 表示红色的三角形,3 表示绿色的五边形,4 表示蓝色的六边形。然后对照着上方的游戏界面,我们将这些数字填入到了下方的这个网格中。接下来,我们的注意力将都会放置在这张填满数字的网格上,因为我们将借助它来完成查找,匹配,以及后来的消除和移动等操作。
你可能会问,为什么放着上方这个直观的图形界面不用,非要把它转换成下方这个看起来晦涩的数字网格呢?这个问题非常好,值得好好的回答一下。
如果你想要和一个只懂英语的人交流,那你会怎么做?先要把你想要表达的内容转换成英语,然后传达给对方,这样对方才有可能理解你的意思。如果,你上来冲着对方讲汉语,即使你说的普通话再标准,大概也只能看到对方一张布满问号的脸。
现在我们把外国人换一下,如果你想要和一台计算机交流,你会怎么做?先要把你想要做的东西转换成它能够理解的语言,然后传达给它,这样它才能够理解你的用意,做出你想要做的东西。如果你上来冲着计算机说:嗨,哥们!我想做一个三消游戏,就那种三个一样的图标凑在一起就可以消除的,怎么样?很简单吧!帮我来一个。你猜结果会怎样。(最近的 ChatGPT 在文字领域的能力已经如此惊人了,AI 绘画也可以根据详细的语言描述画出画来,或许有一天我们还真的能通过对计算机说人话,然后AI就帮助我们把游戏做出来了呢!)
对于人类来讲,我们更擅长处理表象化的东西,黄色的正方形匹配黄色的正方形,红色的三角形匹配红色的三角形,这样很直观,很容易理解。但是对于计算机来讲,它无法理解这些东西,它擅长处理的是“数据”。所以,为了能够和它顺畅的交流,我们就必须要把表象化的东西转化成它所能够理解的“数据”。这个东西还有一个高大上的词汇,叫做“数据抽象”。
其实说白了,就是如果你想要计算机帮你干活,那你就必须跟它说点儿它能够听的懂的“话”。
解答完了这个问题之后,我们继续看看这张填满数据的表格了。对于一个“三消”游戏来讲,我们如何把它的规则翻译成计算机能听得懂的“话”?
任意交换网格中两个相邻的数字,交换之后,如果满足在当前行或者列上至少三个相邻的数字相等,那么这三个相邻的数字就满足消除条件,就可以进行消除。
如图,我们将第 4 行第 4 列的 “1” 和第 4 行第 5 列的 “4” 进行交换,交换之后,竖直方向上的三个数字 4 相等,此时就满足消除消除条件。
好了,这就是消除游戏背后的那些看不见的“数字”了,对于玩家来讲,看到的是一个一个的游戏图标在移动,在消除,在下落,而对于游戏创作者来讲,你所做的其实是在一张布满数字的表格上,交换,比较,移动。这是两种完全不同的角度所看见的两个完全不同的世界,是不是特别的神奇呢?
我们如何在游戏制作时构建这张填满数据的网格呢?仔细再看一下这个网格,它是不是很像是一个表格,二维数组,数组的数组......根据你所使用的编程语言和游戏制作工具的不同,一定都能找到对应的数据类型来呈现出这样的一个布满数据的表格。
在上一篇的基础上,我们在构建“网格”时,就可以再增加一个对应位置上的数字了。
->计算起始点的位置x0,y0 ->循环(行数)次 ->循环(列数)次 ->创建元素 ->根据当前的行列,设置元素的位置xn,yn ->根据当前的行列,在网格上的对应位置设置表格当前元素的数字(新增) ->列循环结束 ->行循环结束
这样在绘制出可见的图标的同时,我们也绘制出了一张看不见的填满数据的网格。
在你的“游戏创作者之眼”得到进一步的提升之后,我们再来看一下那些常见的消除游戏。
交换两个数字,水平或者竖直方向上有 3 个相等的数字即可消除。
- 1010
- 对于1010类型的消除游戏来说,数据格式要简单很多,因为只需要 0 和 1 (计算机最喜欢的东西),只要一行或者一列的数字都是 1 就满足消除条件,是不是有一种豁然开朗的感觉?
- 连线消除
- 连线消除游戏,水平,竖直或者倾斜方向,只要数字相等,就可以把它们连起来,连起来的数字等于或超过 3 个就可以消除。
- 点击消除(消星星)
- 点击任意一个数字,水平或者竖直方向上只要有相同的数字就消除。
(购买消除类游戏模版可以前往【这里】,这个系列教程写完后就要涨价了)
仔细的观看上方的这 4 种不同类型的消除游戏的动图,来提升你的“游戏创作者之眼”的等级。看起来千变万化类型各异的消除游戏,其实背后只不过是在包含着 "0,1,2,3,4" 这 5 个数字的表格中进行着各种各样的操作和处理,是不是很神奇呢?
在表象的游戏世界之下总有一些看不见的东西,作为游戏的创作者你需要具备一双“创作者之眼”来发现它们。很多看上去神奇的东西背后,只不过是一些简单的原理。发现它们就如同是捅破了一层窗户纸,让复杂多变的世界瞬间变得清晰而简单,此时,你可能会禁不住感叹:哦!原来是这样,不过如此啊!
我是会做游戏也会教你做游戏的小蚂蚁,想学游戏开发制作,关注我的就对啦!
自己学习没氛围学不下去?遇到问题无人解答?缺少经验不知该如何前行?......欢迎加入小蚂蚁的游戏开发课,不只是一门课,而是围绕着新手学习做游戏有关的一整套服务。致力于帮助更多的人学会做游戏并做出自己的游戏,欢迎来跟一百多位同学一起学习做游戏。【点击这里】可了解课程服务详情。