文/绯夜氏
一定不是我非,一定是遊戲有問題很久以前流傳着這樣一則笑話:一個身患重病的人決定去動手術。在手術之前,他問醫生:“這起手術的成功率是多少?”醫生回答他:“隻有1%。”他很驚慌,但是醫生說:“沒事的,在你之前我已經治死過99個人了。”
這是一則嘲笑那些不懂“概率”的人的笑話,卻講出了“真随機”和“僞随機”之間的區别。
在四月末的時候,我曾寫過一篇《你打遊戲靠的是技術,還是運氣?》,其中就提及了“僞随機”這個概念。當時受限于篇幅,沒有詳細展開解釋“僞随機”的概念。前不久,在因國際邀請賽而備受關注的Dota2在最近一次的更新中,有這麼一條更新内容:“落空的負面效果和下坡攻擊的落空效果現在都采用僞随機觸發”。
那麼到底什麼是“僞随機”呢?以及和“僞随機”對應的“真随機”又是什麼概念?
在讨論真随機和僞随機之前,先排除另一個容易搞混的錯誤答案:赝随機數。
赝随機數算法(Pseudo-Random Number Generator,簡稱PRNG)是計算機的一個術語——當然,它也可以被叫做“僞随機數算法”,隻是為了方便與遊戲中的“僞随機數”進行區分,本文中統一稱作“赝随機數算法”。衆所周知,計算機程序是由無數“0”和“1”兩種狀态構成的,如果一個狀态不是“0”,那就必定是“1”,頗有種非黑即白的味道。
因此,在計算機程序中,不存在“不确定”的數字,隻有确定的“1”和“0”。基于這種特性,計算機無法生成“真正的(不确定的)随機數”。那麼在計算機中,需要生成或是使用到随機數的時候怎麼辦呢?通常是利用計算機抓取一些數值,然後将這些數值輸入至一個複雜算法(常用的算法是同餘法和梅森旋轉算法,有興趣的讀者可以自行查詢,這裡就不展開講了)當中,通過一系列運算得出一個數字,這就是平常說的赝随機數了。
隻要最初輸入的數值(初值)不變,那麼輸出的值都會是同一個值,這就證明了這個數并不随機,隻是看起來随機而已。換句話說,隻要這個随機數是由确定算法生成的,那就是赝随機數。所以下一次在和朋友聊天時提到真随機數、僞随機數時,如果有人插嘴:“計算機隻能生成僞随機數,所以根本沒有什麼真随機”,那你就可以霸氣側漏地說他是“雲玩家”了。
回到正題。在遊戲當中我們一直提到的“真随機”和“僞随機”,到底是什麼意思?
我們通常說的真随機又名“純随機”(True Random Distribution),就是我們平常一直說的那種、一般意義上的“随機”。在真随機中,每一個事件都是相互獨立、服從真随機分布的,不受其他事件的發生而改變。比方說某款遊戲為了吸引用戶,擁有這麼一個随機抽卡系統:每次抽卡時,都有1%的幾率抽出SSR卡片,這個概率服從真随機分布。
回到我們最開始說的那個“治死99個”的笑話:我們一眼就能看出這個笑話的不合理性。但在抽卡遊戲中,我們的大腦瞬間失去理智。有相當一部分玩家認為:我連抽100次,總能抽到這張卡吧!
實際上,連抽100次卻抽不出1%的SSR卡的幾率是為(1-0.01)^100=36.6%,甚至還稍稍超過了1/3。将連抽數字上升至300,也仍有4.9%的幾率。換句話說,假設有10000個玩家連抽100次,就有約3660個玩家抽不出這張SSR;10000個玩家連抽300次,也仍有約490個玩家抽不出這張SSR——這對玩家的遊戲體驗來說可以說是毀滅性的打擊。
盡管純随機在數學上是無罪的,在代碼中更是明明白白、清清楚楚,但玩家抽不出卡可不會回想到初高中的數學課本,而是首先懷疑幾率是否被策劃運營篡改、這背後又是否有肮髒的PY交易……
當然不僅僅是在抽卡系統當中如此。在一些競技性比較強的遊戲中(比如《War3》、《Dota2》之中——《英雄聯盟》幾乎完全摘除了随機系統,不在此列),連續數次的“走運”極大影響遊戲的競技性和觀賞性。
比方說《Dota中》最著名的概率英雄虛空假面的技能“回到過去”:使虛空假面有25%幾率完全躲避一次傷害。受限于War3引擎,這個技能采用的是真随機概率,在某個極端情況下(通常見于精彩集錦中),虛空假面能夠保持很低的血量承受多次傷害卻不死、最終反殺對手。這種帶給敵方極差遊戲體驗的系統,因此也進入了設計師們“整治範圍”之中。
為了避免極差的遊戲體驗帶來的玩家數量流失,設計者們提出了“僞随機”的概念:在不确定性的随機事件當中,通過一系列算法使随機事件均勻分布在多次事件當中,盡可能減少或消除極端情況的發生,以提高玩家的遊戲體驗。
在設計師們的努力下,“僞随機”應運而生,這裡的僞随機就和上文的赝随機數算法(PRNG)意義不同了。
制造“僞随機”的方法有很多,在《War3》、《Dota2》這類遊戲當中普遍使用的是“僞随機分布”(Pseudo Random Distribution,簡稱PRD)處理概率。
就拿《Dota2》中最強大的暴擊技能“恩賜解脫”來舉例:幻影刺客有15%的幾率造成200%/325%/450%緻命一擊傷害。在PRD機制下,幻影刺客的攻擊實際上并不是每一刀都有15%的暴擊率。
根據PRD機制的公式P(N)=N*C可得出15%幾率的C值為3.22%,即幻影刺客的第一次攻擊暴擊概率為3.22%;如果第一刀沒有暴擊,則第二刀的暴擊率提升至2倍,即6.44%;如果仍舊沒有暴擊,則提升至3倍的9.66%,以此類推。
如果繼續推算,可得在第32刀時暴擊幾率會達到100%,最可能觸發暴擊的次數是第6刀,平均觸發刀數是6.67刀等等……
同樣,在連續觸發暴擊時,下一刀的暴擊幾率會減少。RPD機制使競技遊戲中連續觸發或不觸發技能的幾率降低,避免了運氣成分過度幹擾戰鬥結果,大幅提升了玩家的遊戲體驗,但不影響這些随機事件的正反饋:TI6決賽的“打我五下暈三下”,可是令全球人民集體沸騰了呢!
除了僞随機分布RPD之外,還有兩種常見的僞随機:洗牌算法和組合随機。洗牌算法最常見的用法,是在各大音樂播放器中的“随機播放”之中。在随機播放時,如果采用真随機,會導緻一首歌無論如何都播放不出,或是同一首歌連續播放數次(有興趣的讀者可以計算一下這些概率)。為了解決這個問題,播放器采用的解決方案即是洗牌算法:将一個包含所有歌曲的數組像洗牌一樣打亂,然後依次播放這個亂序數組。
至于組合随機,這是一種廣泛應用于各個遊戲的做法:在抽獎的時候進行兩次、或是更多次的判斷,一次不随機,而剩下的判斷則是真随機。比如說,你會在第X次抽卡時抽到SSR是确定的,但抽中的SSR具體是哪張卡,則是随機的——這就是廣大手遊中的“低保”系統了。
在一堆數據之中想要分清“真随機”和“僞随機”似乎并不是那麼容易。那麼接下來為大家介紹兩個例子,有助于更好理解什麼是“真随機”和“僞随機”:
真随機:有一天,小明在的班級上舉辦了一次抽獎活動。這個班級有40個學生,所以為了公平起見,保證每個學生都有1/40的幾率中獎,老師準備了40個相同的紙盒,每個紙盒中都有40張紙條,有1張紙條是中獎紙條。這樣一來,每個學生都有1/40的幾率中獎,但每個學生是否中獎并不受其他學生的影響。在極端情況下,這個班上可能40個學生都能中獎。這就是真随機。
僞随機:小明班上舉辦了抽獎活動。為了公平起見,老師準備了1個紙盒,紙盒中有40張紙條,隻有1張紙條是中獎紙條。這樣一來,每個學生都有1/40的幾率中獎——但是顯而易見,這個班上有且僅有一名學生能夠中獎。一名學生在中獎後,餘下的所有學生中獎幾率都會減少至0。這就是僞随機。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!