遊戲中的僞隨機機制

遊戲中的隨機概率,一般可以分爲兩類,一類是固定的概率,另一類是根據遊戲行爲有變化的概率。在遊戲中,存在着大量隨機事件,比如常見的暴擊和遊戲中的抽獎等。對於隨機事件的概率,我們通對認爲隨機事件每一次發生的概率等於設定的概率,從另一個角度來說,隨機事件每一次發生的概率都固定且不受事件上一次結果的影響。在大量樣本計算的情況下,並不存在什麼問題。然而在實際遊戲過程中,我們會更關注於相對小的樣本數下,也就是有限次操作(攻擊/抽獎)過程中,隨機事件帶來的感受。爲了保證有限次操作的概率相對穩定,營造良好的玩家體驗,引入了僞隨機的機制。本文對遊戲中常見的隨機過程做簡要介紹,對僞隨機過程較爲詳細的分析,並給出了一種簡單的由概率求取僞隨機過程的方法。

比如20%的暴擊率,我們通常認爲每一次攻擊觸發暴擊都是固定的機率20%,從另一個角度來說,每一次攻擊的暴擊率是獨立且固定的,並不受攻擊次數和之前攻擊效果的影響。在實際過程中,玩家有了另外一種理解,或者說是期待,5次攻擊出現1次暴擊,更寬泛的一點說,玩家會認爲在3~7(一般4~6爲佳)次的過程中發生一次暴擊。而對於遊戲策劃的設計來說,一般並不希望玩家能夠在20%的暴擊率下,獲得較高概率的連續兩次暴擊,同時也不希望會有連續10次不發生暴擊的情況。這些問題在傳統固定概率的情況下較難得到解決。

對於固定的概率,定義P(K)爲前K-1次未發生暴擊,第K次發生暴擊的概率,則P(K=N)爲:

640.webp (159).jpg

這是一個單調遞減函數,隨着N的不斷擴大,P不斷減小,在有限次操作的狀態下,玩家對於20%容易缺少一個較爲準確的感知。爲了增強這種感知,可以讓P在K=5附近擁有較大的概率,在其他情況下擁有較小的概率。當然在K=5之外,P趨近於0的速度是我們另外一個可以關注的問題,在此暫不做討論。

下表爲通過固定概率和僞隨機過程獲得暴擊率的對比,P(K)爲前K-1次未發生暴擊,第K次發生暴擊的概率,S(K)爲前K項之和。

640.webp (158).jpg

下圖更直觀的展示了這種差別。

1437444721792926.jpg

1437444721395513.jpg

從圖中,我們可以非常清晰的看到通過僞隨機函數能夠較好實現預期。對於圖表的進一步分析,在K=5附近的概率,3<K<7的概率,以及方差,在此暫不做討論。

接下來我們對於僞隨機過程做介紹,我們繼續以暴擊率爲例。

對於暴擊率來說,僞隨機機制通過不同攻擊次數擁有不同的實際暴擊率來實現,具體規則如下:

設定初始的概率爲P,定義隨機種子C爲一個常數。目前對於DOTA中劍聖的暴擊率分析較爲全面,本文也將以劍聖爲例介紹僞隨機機制,所以設定P=20%,C=5.57%。

1.進行第一次攻擊,暴擊概率爲C。如果未暴擊,進入流程2;如果暴擊,返回流程1進行下次暴擊計算。

2.進行第二次攻擊,暴擊率爲2C。如果未暴擊,進入流程3;如果暴擊,返回流程1進行下次暴擊計算。

3.進行第三次攻擊,暴擊率爲3C。如果未暴擊,進入流程4;如果暴擊,返回流程1進行下次暴擊計算。

……

17.進行第十七次攻擊,暴擊率爲17C。如果未暴擊,進入流程18;如果暴擊,返回流程1進行下次暴擊計算。

18.本次攻擊必暴擊。返回1進行下次暴擊計算。

也就是說,如果一個英雄始終不暴擊,那麼他的暴擊概率將會是:C,2C,3C,4C,...,NC。當N足夠大時,NC會大於等於1,所以一定會發生暴擊。實際上,英雄攻擊的暴擊概率始終在若干個不同暴率的狀態中切換。但是,當這種攻擊進行次數很多以後,此英雄的平均暴擊概率會趨近於20% 。

下面的表格是從網上搜索到的WAR3關於顯示概率P、隨機種子C、暴擊前攻擊的最大次數maxN,實際統計概率Pcount的數據表格。

640.webp (152).jpg

接下來對通過C值計算P值的過程做介紹。

在此我們令 :

640.webp (151).jpg

爲第K次攻擊的暴擊率(之前的K-1次未發生暴擊),則:

640.webp (155).jpg

令代表第K次成功暴擊的概率,即前K-1次未發生暴擊,第K次發生暴擊。則:

640.webp (150).jpg

綜上,成功暴擊一次所需要的平均次數爲:

640.webp (149).jpg

所以暴擊的實際概率爲:

640.webp (148).jpg

通過以上推導,我們就可以根據C值求出實際概率Pa。

對於我們在實際使用過程中,我們更關注如何通過P值求得C值。P和c的函數關係爲單調函數,在此我們介紹一種簡單的方法進行實現,最小二分法,在最優化理論中有很多可以減少迭代次數的方法,歡迎大家進行嘗試。

最小二分法如下:

首先我們會定義一些參數,C1,C2,C3,eps,初始化C1=0,C2=1,暴擊率精度eps=0.01%,預設暴擊率爲Ps。

1.令C3=(C1+C2)/2

2.計算C3的實際Pa。如果Pa與Ps差值的絕對值小於eps,則結束計算,C3即爲所需要的種子;如果Pa與Ps差值大於eps,進入流程3。

3.如果PaPs,則C2=C3。返回流程1。,則c1=c3;如果pa>

通過有限次的迭代,我們就可以獲得隨機種子C。

通過以上的僞隨機機制,有利於遊戲中概率事件的穩定。對於暴擊事件來說,僞隨機機制降低了連續暴擊或者連續不暴擊的的概率,使得玩家的體驗更爲友好。

在現在手機遊戲中,廣泛採用了可以保證一定收益的抽獎方法,比如玩家的十連抽,這種過程也是僞隨機過程的一種。這種十連抽必中的策略,保證了玩家擁有較爲平穩的體驗,也有利於遊戲體驗節奏的把控。對於這些僞隨機過程在此不一一分析。對於上文提到的如果使概率更爲集中的方法,有興趣的讀者也可以進一步研究。

本文使用了網上的一些資料,對大家表示感謝,希望本文能夠爲入門同學提供一些幫助。如果大家對於複雜的隨機過程感興趣,歡迎一起討論。如有版權問題,請聯繫我。

文章源自“GAD-騰訊遊戲開發者平臺”(騰訊遊戲出品,國內業界首家專業獨立遊戲開發者平臺。Gad面向遊戲從業者,打造開放、互聯、回饋、分享的專業遊戲人社區,提供免費組件下載、專業知識學習、組隊遊戲製作、項目孵化渠道等服務。)

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