遊戲的隨機
在遊戲中概率是用的相當多,無論dota中暴擊,閃避技能的觸發,還是征途裝備強化的升星,或者各種卡牌遊戲的Gacha,都會用到很多的概率和隨機性。
隨機性帶來了驚喜,但是對於這些遊戲中的隨機我們又真正了解多少呢?
對於,遊戲中的隨機又分為真隨機和偽隨機,(這裡的偽隨機是指在隨機中加入了一些特殊規則,如保底或者PRD)。
那我們就分別聊聊這些隨機。
- 真隨機
準確的來說,計算機中沒有真正的真隨機,計算機的隨機是同過一個種子(常用時鐘)產生的一個偽隨機數。如果種子相同,那麼產生的隨機數也是相同。
在魔獸爭霸的遊戲中,常常打完一場遊戲,會生成一場錄像,那麼對於一場錄像中,需要記錄各種掉落裝備,攻擊浮動,閃避,暴擊等信息,那麼無疑數據量是巨大的,但是由於隨機的種子的存在,那麼真實的錄像會記錄這個隨機種子和玩家的各種操作,所以當玩家再次觀看錄像是隨機掉落的裝備還是同一個的隨機的種子,攻擊浮動值和閃避,暴擊等信息也是在這個隨機種子的生成下生成的一個值,所以必然結果一致。
真實的隨機可能只存在於量子力學,最典型的例子就是薛定諤的貓。
但即使這樣,我們姑且把電腦的這種rand函數的隨機都看做是一種真隨機吧,我們下面提到的真隨機都是此類隨機。
這種隨機的好處是簡單易處理,比如Gacha中一張5星卡牌的概率是5%,那麼抽了100次卡牌,理論上應該會獲得5張5星卡,然而在真實世界中,你可能一張5星卡都不會獲得。而隔壁老王可能抽了一次就會獲得1張5星卡。
這種真隨機也帶來了玄學的出現,可能是抽卡的姿勢不對,也可能是抽卡的時間不對,或者抱怨自己是一張非洲臉,但實際上只是因為真隨機就是這樣無跡可尋,對於真實的玩家體驗很差。(如果基數足夠大,那麼抽100萬次,你會發覺概率是對的,或者100萬人一起抽,概率也是接近的,但是放在單一用戶身上,這個概率就是極為糟糕的。)
對於用戶來說,如果他連續抽100張卡,他都沒有獲得5星,即時你明確告訴他5星卡牌的概率是5%,他也不會相信,這次糟糕的體驗就足夠讓他有理由放棄你的遊戲了。
真隨機的優點是:簡單,隨機性大,基數足夠大的時候比較準確
同樣真隨機的缺點是:基數比較小單個人的概率波動較大,特別是概率不好時用戶體驗相當差
為了讓他有更好的玩家體驗,偽隨機就應運而生了。
- 偽隨機
那麼什麼是偽隨機?
偽隨機是一張通過一些額外的補充措施,使得遊戲的概率與預期趨於一致的隨機措施。
下面介紹幾種常用的偽隨機:
(1)保底法
同樣針對上面的這個問題,抽卡概率為5%,如果有保底存在,那麼可能會出現這樣的方式,如果玩家連續抽了19包沒有出五星,那麼第20包必然出現5星。即保底出5星的概率為20,每20包必然有一個5星。
如果你希望這個結果,有一定的變化,你可以將這個保底設為RandBetween(20,25),即保底的值是一個隨機的20到25之間的值,當玩家連續抽包次數達到這個隨機值,那麼必然出現5星卡。(這個隨機值一般會大於期望值,因為每次抽包依舊保持5%的概率,所以總體概率會高於5%)
由於有保底值的存在,在有些遊戲的掉落和卡包概率設計中,在保底之外其餘時間獲得高級物品的概率為0。
保底法的優點是:保證了概率事件的必然發生,用戶體驗較好
但是保底法的缺點是:隨機性較小,所有玩家到達保底時概率事件都會發生
(2)PRD
PRD演算法是一種利用2分法,不斷計算以達到現有概率的期望值,但是長遠看又是必然會發生的隨機演算法。
同樣以上面的抽卡概率為5%為例,在PRD演算法中,玩家首次抽取卡牌獲得5星卡牌的概率為c,如果本次未抽中,則下一次抽取中概率變為2c,同理第三次概率為3c,直到達到N*c(N*c>=1),即第N次必然會獲得5星卡牌,如果中途抽中5星,則將概率重新置為c。
期望的計算公式為:
P=1*c+2*(1-c)+3*(1-c)(1-2c)*c+.....+(N-1)*(1-c)(1-2c)....(1-(N-2)*c)*c
其中P為1/p(這裡的p為5%的概率),N=ceiling(1/c)(N為整數,第N次概率事件必然發生)。由已知的概率事件發生值p,通過2分法在(0,1)的區間內不斷估算c的值,直到上面的公式兩邊的值誤差在很小的範圍,就可以估算出c的值。
在PRD演算法中,只是保證了在線性c的概率下的期望值與p的期望值一致,從而保證了概率事件的發生。
具體的計算過程這裡也不再描述,下面列出常用的p與c的對應值
但實際上隨著p的增長,特別是概率大於30%後,prd演算法的誤差也會越來越明顯,因為prd演算法畢竟是通過二分法不斷去擬合真實概率的期望,p的增大也帶來擬合數據的誤差也會越大,另外,小數點位的限制也導致超過一定數據,這個值越來越不準確。PRD演算法的優點是:在概率較低情況下,PRD演算法的期望和隨機概率的期望相近,並且不會出現隨機概率的必然不會發生的狀況,是一個比較理想的隨機方案實現
但PRD演算法也有2個明顯的缺點:
1 當概率較大時,PRD演算法不能很好的擬合真實數據,並且有一定的誤差,所以概率大於35%時,不建議用此演算法
2 如果概率發生的次數或者回合比較少,不建議用PRD演算法(比如5%的概率,在PRD演算法中,前10次每次的概率都遠遠低於5%,如果交戰只有10回合,該演算法反而降低了觸發)
其實,無論是什麼樣的隨機方式,都是為了讓玩家有更好的用戶體驗,解決玩家的痛點才是最重要的方式。現在大多數遊戲的掉落或Gacha設計中都加了保底設計,就是為了讓用戶不會消耗精力或金幣而得不到所希望的物品。
而PRD演算法的適用更典型的是用於Dota的技能設計中,這樣保證了玩家更好的用戶體驗,不會出現連續多次不暴擊或者不閃避的事情發生。
推薦閱讀:
※如何看待夢幻花園每次都只差1、2步就能通關?
※Feature觀察:第4期:細分領域受到關注
※全英雄無符文 這款新MOBA遊戲會帶給你絕佳的對戰體驗嗎?
※Feature觀察:第9期:「紀念碑谷」仍有餘熱
※半年再回看國內端游市場:海外優質網遊將引入 新游屈指可數