非酋的福音?談一談遊戲內的偽隨機機制以及實現
歐洲玩家A:抽取10次以內成功就獲得了saber,心滿意足
較歐玩家B:抽取11-20次成功獲得了saber
較非玩家C:抽取21-30次成功獲得saber
非洲玩家D:抽取31-40次才獲得saber
非洲酋長E:抽取41-80次才獲得saber
那麼我們來統計一下,在這次卡池獲得中,各種族玩家的人數假設100個人抽,各抽1次,因為為概率為5%,那麼5個人第一次便抽中,其餘95人抽,同樣5%,那麼95*0.05的人,抽中,以此類推
玩家A 數量 = 0.05+0.0475+….+0.031512 = 40.13%
玩家B 數量 = 0.029+0.02844+…+0.018868 = 24.02 %
玩家C 數量 = 0.017924+…+0.11297 = 14.38 %
玩家D數量 = 0.010732+…+0.00405 = 8.61%
玩家E數量 = 0.03847+…+0.000312 = 11.1 %
我們將此套資料運用在一個10萬玩家投入到了這個活動中的遊戲上,會出現怎麼樣的災難般的場景?
在
4萬人的歐洲玩家A歡呼雀躍,
2.4萬的歐洲延邊玩家B心滿意足,
1.4萬的非洲延邊玩家C強顏歡笑,
近8600名非洲內陸玩家D失聲啜泣,
以及1.1萬名非洲酋長玩家E的欲哭無淚中,
“圓滿”地結束了此次FGO卡池活動!
實際的運營與開發商,在同等概率的情況下,並不希望有如此極端而真實的概率情況,那麼偽隨機的機制應運而生,同時削減歐洲人和非洲人數量,各種族人數向玩家B和C之間,靠攏,是普遍目前營運商和開發商的普遍做法,那麼如何使用偽隨機機制,才能保證,概率的可控性呢?
數值是解決思路的體現:
希望玩家開始抽的時候,抽到概率較低,每抽一次,如果不中,下一次的概率更高,抽到後,概率迴歸初始值,總體概率與期望相同。重要的是,這個初始值和這個每次概率的累加值,如何確定?才能保證我們的數值的可靠和可驗證性。
偽隨機模型:等差疊加模型
即第一次概率為X,第二次概率為2X,第三次概率為3X….以此類推,最終總體概率為Y確定Y和X,Y為設定的值,假設 Y = 5% ,預估 X的值 ,並將其帶入VBA模擬
- VBA參考
- Sub test()
- x = 0.22 #X值
- t = 0
- c = 0
- g = x
- Randomize
- n = 10000000 #模擬1000萬次
- For i = 1 To n
- If Rnd < x Then
- x = g: c = c + 1: t = t + 1
- Randomize
- Else:
- Randomize
- x = x + g: t = t + 1
- End If
- Next
- MsgBox "實際概率 = " & c / t #Y值
- End Sub
可得下表
按照該套計算方法下,我們再次計算情景一中玩家數量,即Y=5%,X=0.00378時
假設10000個人抽,各抽1次,因為為概率約為0.38%,即,38人第一次便抽中,其餘9962人開始抽第二次,這次概率為第一次的2倍,即0.76%,以此類推
玩家A 數量 = 19.00% (<10次)
玩家B 數量 = 36.74% (11至20次)
玩家C 數量 = 28.21%(21至30次)
玩家D 數量 = 12.25%(31至40次)
玩家E 數量 = 0.037%(41至80次)
我們看下兩種的對比圖
由此可見,較真隨機的機制來比,採用此套偽隨機下,對於玩家體驗有如下提升:
1>體驗最差的D和E類玩家總數降低,體驗最差的E類玩家數量減少了66%
2>總體人數向平均的B和C類玩家靠攏,‘公平性’的感官體驗相對於真隨機來說,有了很大提升
相關文章
- 談談JavaScript中的this機制JavaScript
- 玄不救非,氪不改命 如何分清遊戲中的“真隨機”和“偽隨機”?遊戲隨機
- 談談ConcurrentHashMap的擴容機制HashMap
- 淺談多型機制的意義及實現多型
- JVM探究(一)談談雙親委派機制和沙箱安全機制JVM
- CSS中如何實現偽隨機?CSS隨機
- 談談MySQL bin log的寫入機制、以及線上的引數是如何配置的MySql
- 談談 JVM 垃圾回收機制JVM
- 隨機數漫談隨機
- 淺談Java —— Reflection機制(一)Java
- 談談 Promise 以及實現 Fetch 的思路Promise
- 談談比特幣的機制及攻擊比特幣
- 談談 HTTP/2 的協議協商機制HTTP協議
- 談談我對Android安全機制的理解Android
- 談談 Java 類載入機制Java
- HashMap的內部實現機制HashMap
- 反射機制 小小談反射
- 從JS的執行機制的角度談談作用域JS
- 淺談 LiveData 的通知機制LiveData
- [譯]談談SpringBoot 事件機制Spring Boot事件
- 談談 Event Loop(事件迴圈)機制OOP事件
- 如何利用“隨機”來控制貧富差距? 談談網路遊戲中的概率設計隨機遊戲
- 談談戰雙的戰鬥機制設計趨同
- 談談 jQuery 中的防衝突(noConflict)機制jQuery
- 從原始碼的角度來談一談HashMap的內部實現原理原始碼HashMap
- 談談fail-fast與fail-safe是什麼以及工作機制AIAST
- 再談冪等機制
- Java 同步機制淺談Java
- 淺談Java的反射機制和作用Java反射
- 淺談Kotlin的Checked Exception機制KotlinException
- 淺談HTML5 WebSocket的機制HTMLWeb
- 計算機視覺隨談計算機視覺
- 談談目前國內已知的主機管理系統現狀和使用感受
- 談談 Javascript 的執行機制及對同步非同步的理解JavaScript非同步
- 淺談JS事件機制與React事件機制JS事件React
- 淺談 MFC 的子類化機制和該機制的一個應用(2) (轉)
- 淺談 MFC 的子類化機制和該機制的一個應用(1) (轉)
- 讓人沉浸遊戲的魅力機制:隨機與策略遊戲隨機