編程遊戲開發中,概率機制可參考 PRD公式

說到概率,有一個特別經典的問題:存在三個盒子,其中一個盒子中存放着大獎。現在你隨機挑選了其中一個,中獎的概率是1/3。接着主持人打開了剩下2個盒子中的一個,沒有中獎。問給你一次重選擇的機會,你會怎麼做?維持原來的選擇 or 放棄原來的選擇。

 

1. 隨機

 

隨機是我們進行概率推導的基石之一。我們的統計學中經常說一枚硬幣拋正面的概率是50%,就是基於每次拋硬幣都是隨機事件。

插播一條笑話:一個身患重病的人決定去動手術。在手術之前,他問醫生:“這起手術的成功率是多少?”醫生回答他:“只有1%。”他很驚慌,但是醫生說:“沒事的,在你之前我已經治死過99個人了。”

聽着沒毛病,但是卻說出了“真隨機” 和 “僞隨機”的區別了。

 

   

真隨機

在真隨機中,每一個事件都是相互獨立、服從真隨機分佈的,不受其他事件的發生而改變。拿上面的笑話舉例,每次手術的成功率都應該是1%,這種相互獨立的,不受其他事件的發生而影響,纔是真隨機。

 

   

僞隨機

我們程序員都知道,程序給定條件,得到的是確定的結果。所以我們編寫的Math.random()肯定不是真隨機,而是僞隨機。代碼底下無祕密,我們看下自帶random函數的隨機數產生的邏輯。

圖1 random函數計算源碼

可以看出,如果給定相同的seed,random方法將返回相同的隨機數。所以程序只是在生成近似隨機結果

洗牌算法

各大音樂播放器中的“隨機播放”之中。在隨機播放時,如果採用真隨機,會導致一首歌無論如何都播放不出,或是同一首歌連續播放數次。爲了解決這個問題,播放器採用的解決方案即是洗牌算法:將一個包含所有歌曲的數組像洗牌一樣打亂,然後依次播放這個亂序數組。

 

在遊戲中,會有概率暴擊的設計。比如某個角色的大招有35%的概率使出暴擊,按照真隨機,那麼連續暴擊的概率 0.35X0.35=12.25%。
過高的暴擊概率對嚴謹的競技賽事來說,無疑是極其不公平的。因爲一次人品爆發秒掉對方核心,可能直接決定賽事的成敗,而缺少了競技的成分。
因此遊戲公司大都遵循 PRD機制PRD公式如下:

圖2 PRD公式

其中,C是一個小於1的常數(算法複雜,可以查表),N表示嘗試次數,P爲概率。公式表明的意義是:從事件發生起,每次不成功的嘗試都會增加1個固定值。 當觸發暴擊後,概率N重新計算。

圖3 預先算好的C值表

從表中,可以查到35%概率,使用的C約爲16%,因此可以算的p(7)=16x7%=112%, 即7次必出現1次暴擊。同時上來即兩次暴擊的概率爲 0.16x0.16 = 2.56%,大大降低了人品的干預。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章