我是會做游戲也會教你做游戲的小螞蟻,歡迎關注我,每天學點兒做游戲的知識。
嗨!大家好,我是小螞蟻。今天我們繼續(xù)學習如何做一個俄羅斯方塊游戲。
整個系列教程計劃按照這個流程圖開展,這也是我制作整個游戲的過程,今天我們就來看一下“隨機生成形狀”這個模塊。
創(chuàng)建形狀
想要實現(xiàn)隨機的生成形狀,首先必須要知道在俄羅斯方塊中一共有多少種形狀(也就是我們上一節(jié)中留下的第二個問題)。
如圖,就是俄羅斯方塊中所有的 7 個形狀了,試著觀察一下這七個形狀有一個共同點。那就是每個形狀都是由 4 個小方塊組成,這是一個很重要的特征,這就意味著你只需要 4 個小方塊,就可以通過調(diào)整擺放位置,構(gòu)建出游戲中的所有形狀了。
對于游戲中的形狀來說,除了需要知道都有哪些之外,我們還需要另外一些信息,就是每一個形狀有多少“狀態(tài)”可以變換。
如圖,是 7 種形狀的變換,形狀 1 3 分別有 4 個狀態(tài),形狀 4 6 分別有 2 個狀態(tài),形狀 7 只有 1 個狀態(tài)。
這里我們把形狀的每一個不同的旋轉(zhuǎn)位置叫做一個“狀態(tài)”,以第 1 個形狀為例,它一共有 4 個狀態(tài),第 1 個狀態(tài)是“T”型,第 2 個狀態(tài)就是第 1 個狀態(tài)以順時針旋轉(zhuǎn) 90 度,第 3 個狀態(tài)是第 2 個狀態(tài)以順時針旋轉(zhuǎn) 90 度,第 4 個狀態(tài)是第 3 個狀態(tài)以順時針旋轉(zhuǎn) 90 度。第 4 個狀態(tài)再以順時針旋轉(zhuǎn) 90 度,就回到了第 1 個狀態(tài)。整個狀態(tài)切換是一個首尾相接的循環(huán)過程,每一個狀態(tài)都是以上一個狀態(tài)為基礎,順時針旋轉(zhuǎn) 90 度。
你可以繼續(xù)觀察一下剩余的其他形狀,看看每一個形狀的狀態(tài)是否都滿足上述的條件。
在確定了形狀之后,我們?nèi)绾卧谟螒蛑邪阉鼈儤?gòu)建出來呢?答案其實很簡單,直接拼出來就好了。
以第 1 個形狀為例,假設每一個小方塊的大小都是 50×50,以形狀的中心為坐標軸的中心,那么很容易就可以計算出 4 塊小方塊的具體位置。
在得到了 4 個小方塊的位置之后,我們可以在微信小游戲制作工具中將 4 個小正方形(50×50)打包到一個容器中,然后分別為它們設置到對應的位置上,這樣一個形狀就創(chuàng)建好了。
這里注意一下,當我們將 4 個小方塊打包成容器“形狀1”之后,這個容器整體是一個矩形,中點位于矩形的中心,這個中心也表示容器“形狀1”的位置。例如,將“形狀1”容器設置到(0,0)的位置,實際上是容器的中心點位于 (0,0) 的位置(這個在后續(xù)計算中需要用到,這里先了解一下)。
剩余其它的幾個形狀也如此,可以先在紙上畫一下,計算出每個小方塊的位置,然后再在制作工具中創(chuàng)建出對應的形狀。
隨機
形狀創(chuàng)建好了,接著我們來看一下如何進行隨機。目前對于俄羅斯方塊的隨機有很多種方式,這里我們只說一下其中的兩種,一種是最古老的隨機,另一種是用的比較多的叫做“Bag7”的隨機。
最古老的隨機其實就是每次生成的方塊都是從 1 7 個形狀中隨機的生成一個。由于每次生成都是隨機的,所以有可能出現(xiàn)連續(xù)多次生成同一種形狀,或者連續(xù)很多次都不生成某一種形狀的情況,這些情況會導致游戲難度的增加。
這種隨機很簡單,我們只需要從 1 7 中,生成一個隨機數(shù),然后根據(jù)這個隨機數(shù)生成指定的形狀即可。
后來,為了降低游戲的難度,普遍采用了叫做“Bag7”的隨機方法。就是生成一個由 1 7 的 7 個數(shù)字隨機排序組成的包(列表或者數(shù)組),然后按照這個包中的排序生成形狀,生成 7 個形狀后,就再創(chuàng)建一個這樣的包,然后再繼續(xù)。
這種算法保證了同一個形狀最多只能連續(xù)出現(xiàn) 2 次(前一個包的最后一個數(shù),跟后一個包的第一個數(shù)相同)。同一個形狀最多只能間隔 12 次不出現(xiàn)(前一個包的第一個數(shù),跟后一個包的最后一個數(shù)相同)。
接著,我們來看一下“Bag7”隨機算法的實現(xiàn)。首先,我們創(chuàng)建一個叫做“Bag7”的列表,這個列表中包含了 1 7 的 7 個數(shù)字。
接著來看一下積木邏輯。
微信小游戲制作工具為我們提供了一個“將列表隨機打亂”的積木塊,我們可以直接利用它來得到打亂了順序的列表(Bag7)。每當生成一個形狀后,就將變量“Bag7索引”增加 1,直到這個列表中的所有項遍歷完畢,然后再繼續(xù)生成下一個新的“Bag7″。
好了,今天的內(nèi)容就到這里了,稍微總結(jié)一下:我們了解了俄羅斯方塊中的 7 個形狀,以及每個形狀所包含的不同狀態(tài),最后了解了兩種不同的隨機算法。
是不是有種“哇哦 ”的感覺?這么簡單的一個俄羅斯方塊游戲竟然能夠包含這么多的東西。所以說即使是一個小游戲,只要你用心研究,里面也包含著很多可以學到的東西。更何況,我們的這個小游戲才剛剛開始而已。