天天看點

微信小遊戲開發實戰12:随機生成形狀功能的實作

嗨!大家好,我是小螞蟻。今天我們繼續來學習随機生成形狀功能是如何實作的。

在精緻1010遊戲中,包含 10 種不同類型的形狀,這一節我們就來講一下如何通過使用清單來控制不同形狀的生成機率。

微信小遊戲開發實戰12:随機生成形狀功能的實作

如圖是遊戲中使用的 10 種類型的形狀,我為其進行了編号,有的類型隻包含一種,如 7, 8, 10,有的類型包含兩種,如 1,2,3,4,有的類型包含四種,如 5,6,9。

微信小遊戲開發實戰12:随機生成形狀功能的實作

在遊戲的下方存在 3 個形狀槽,每個形狀槽中都會随機的産生一種形狀。我們可以通過設定不同類型的形狀的生成機率來調整遊戲的難度,例如 1,8 兩種類型的形狀出現的機率高的話,遊戲的難度就會增大。反之,難度就會減小。

下面,我們就來實作一下如何根據設定的機率随機的生成形狀。

首先,建立一個清單,用于設定 10 種類型的形狀的權重(權重可以了解成機率,數值越大,則該圖形出現的機率越高)。

微信小遊戲開發實戰12:随機生成形狀功能的實作

如圖,清單中包含了 10 個數值,我們将每個數值對應一種形狀的類型,例如清單的第一個數值對應的是形狀 1 的生成機率。這裡我預設的将 10 種形狀的權重都設定為 10,也就是說 10 種類型的形狀出現的機率是均等的。

随機算法

接下來,我們了解一下一個簡單的計算随機的算法。

微信小遊戲開發實戰12:随機生成形狀功能的實作

假設我們目前需要在 3 項中進行随機,每一項的權重都是 10。首先我們計算一下總權重為 30,接着從 1~30 的數字中随機一個數字,目前假設随機到了 25。接下來進行循環周遊比對:

循環 1: 25 比第一個數值 10 要大,是以不是第 1 項,将 25 減去第 1 項的數值 10,進入下一循環。

循環 2: 15 比第一個數值 10 要大,是以不是第 2 項,将 15 減去第 2 項的數值10,進入下一循環。

循環 3: 5 比第一個數值 10 要小,是以是第 3 項,循環結束找到最終結果,随機到的是第 3 項。

這個算法隻使用了一個清單就實作了根據不同的權重進行随機的功能,清單的項可以對應着任何的東西,例如可以設定一,二,三等獎,分别對着清單的 1,2,3 項,然後就可以通過設定三項的數值來決定随機的機率了,比如說可以這樣設定 1,100,10000,這樣極大的機率都是三等獎了。是以,你知道遊戲和應用中的各種轉盤,抽獎活動的原理了吧!

可能有人會說,我直接使用如果“那麼,邏輯”不就行了?何必使用清單和循環這麼麻煩。現在隻有 3 項随機,可以使用“如果,那麼”邏輯,但是如果有 30 項呢?如果每一項的權重需要經常設定和調整呢?

使用這個方法不論有多少項,不論每項的數值如何調整,都可以簡單的通過調整清單中的數值滿足要求。可以說是非常的好用,大家可以把它收錄到自己的算法庫中,每當遇到需要設定權重值的随機功能時,就可以拿過來用了。

随機生成形狀的實作

接下來,看一下具體的實作。

微信小遊戲開發實戰12:随機生成形狀功能的實作

首先,周遊一下清單,将所有的權重累加,計算總權重。接着在 1~總權重 間随機一個數值。然後,再次周遊清單逐項比對,直到找到目前的值小于目前項的值,那麼目前的項的索引就是我們要找的随機項了。

在擷取到了随機的項之後,接下來就要去生成對應的形狀了。

微信小遊戲開發實戰12:随機生成形狀功能的實作

邏輯非常簡單,就是根據随機項的數值,生成不同類型的形狀。

圖中可以看到,這裡我将“生成形狀”都包裝成了“函數”,下面我們就來了解一下如何在微信小遊戲制作工具中使用函數。

使用函數

在積木區中找到“函數”類别,然後點選“建立函數”按鈕。

微信小遊戲開發實戰12:随機生成形狀功能的實作

給函數起一個名字,點選确定後,目前的積木區就會顯示出目前要制作的函數了。

微信小遊戲開發實戰12:随機生成形狀功能的實作

可以通過點選積木塊上的“加号”和“減号”按鈕來添加和删除參數。參數的作用就是向函數内傳遞用于計算和處理的東西。

微信小遊戲開發實戰12:随機生成形狀功能的實作

如果你有過程式設計經驗,就會知道根據傳回類型來區分的話,函數分為兩種,一種有傳回類型,一個沒有傳回類型。但是在微信小遊戲開發工具中,隻有一種沒有傳回的類型的函數。

假設目前我們的函數有這樣的功能,将兩個參數中的數值進行相加,得到結果。由于函數不能傳回值,是以這裡我們需要借助一個全局變量來存儲函數處理的結果值。

微信小遊戲開發實戰12:随機生成形狀功能的實作

函數制作好後,可以直接拖拽對應的函數積木進行使用。函數計算的結果儲存在了“全局-相加結果值”中,後續如果我們需要使用函數處理的結果值,就直接使用這個全局變量即可。

微信小遊戲開發實戰12:随機生成形狀功能的實作

所有建立的函數都會顯示在資料總管中的函數子產品下,可以右鍵點選對應的函數進行重命名和删除處理。

微信小遊戲開發實戰12:随機生成形狀功能的實作

生成對應形狀的實作

最後,讓我們看一下項目中的生成形狀5的具體實作。

遊戲中的形狀5包含了 4 種不同的形态。

微信小遊戲開發實戰12:随機生成形狀功能的實作

生成形狀5的函數,根據傳入的參數,生成不同形态的形狀。

微信小遊戲開發實戰12:随機生成形狀功能的實作

生成形狀5函數的使用,傳入一個1~4的随機數值。

微信小遊戲開發實戰12:随機生成形狀功能的實作

看一下最終遊戲中生成新形狀的效果。

微信小遊戲開發實戰12:随機生成形狀功能的實作

繼續閱讀