每日最新頭條.有趣資訊

50%暴擊等於4下必暴!遊戲中的偽隨機你都知道多少?

  很多玩家在遊戲中都經歷過這樣的事:

  自己的明日方舟爐石傳說,10連開包次次藍天白雲;朋友1抽,哇!金色傳說。

  以前刷大菠蘿,現在刷懷舊服大螺絲,遊戲變了,但運氣還是那般,一世無橙。

  玩LOL和DOTA2的時候,自己的英雄50%暴擊紅字難求,對面的15%暴擊重拳出擊。

  每當遇到這種倒霉的“隨機事件”,總能讓人頓足捶胸:這哪裡是什麽技術遊戲?分明就是辣雞遊戲,全靠運氣!

  其實不管是現實生活還是遊戲世界,都存在各種各樣的“隨機事件”。中彩票有概率、掉橙卡有概率、女朋友無緣無故生氣也有概率。

  但兩者又有些不同。女朋友生氣大多數時候是看心情的,難以預測;而遊戲世界裡的大多數“隨機事件”都有一個“劇本”。

  也就是說,你今天開的藍天白雲、打怪爆的什麽裝備,其實系統早就給你安排得明明白白了。這些所謂的“隨機事件”其實不是真隨機,而是按照代碼來實現的“偽隨機”。

  那問題來了,什麽是“偽隨機”?

一、偽隨機

  大家可以簡單理解為,能用算法生成近似於隨機結果的嘗試,叫偽隨機。(此處的算法一般指梅森旋轉算法,這裡不展開)

  舉個通俗易懂的梨子,音樂app的隨機播放就是典型一個的偽隨機。

  今天我想在咪咕上隨機播放3首歌。系統會根據算法,隨機給我生成一個播放列表。如果是真的隨機,我會聽到重複播放的歌曲。比方說我聽完《Love Story》下一首還是《Love Story》的概率是33.3%。

  然而事實卻是,隨機播放的歌基本不會重複。所以當這個歌單播放了2首歌之後,我是能準確預測第3首歌的。

  這種“部分可預測性”是偽隨機的最大特徵之一。

  而真正的隨機事件,是相互獨立的,它不受其他事件的發生而影響。它不會因為你播放了這首歌,而影響下一首歌的播放。每一個結果都不可預測(最多有概率)。

  那為什麽要用這樣的“偽隨機”來營造一種“隨機”的感覺呢?

  說出來你可能不信,選用“偽隨機”是為了照顧玩家(用戶)的體驗,讓玩家(用戶)感到更“隨機”。

二、遊戲中的偽隨機

  遊戲中也存在各種各樣的隨機事件。

  就以文章前面說到的明日方舟為例。遊戲中最優質的卡牌——六星乾員爆率是2%,這個概率雖然看著通俗易懂,但很多人其實是有認知盲區的。

  不少玩家將它簡單地理解為“開50包必有1張六星”,但其實開50包至少有1張六星的概率只有1-(1-0.02)^50=63.58%,剩下36.42%的人即使開滿50包,他們連見六星影子的機會都沒有。

  就算是把開包的次數增加到100次和150次,依然會有13%和5%玩家開不到六星。在真實的隨機事件下,這些情況下是客觀存在的。

  但對玩家來說,他們很難意識到這點。看著自己充了足夠多的錢,卻享受不到良好的遊戲體驗,他們會遷怒於遊戲的運營和策劃,罵遊戲作假、策劃暗改數值。

  為了避免這種情況的發生,大多數集卡式遊戲的抽卡系統都有一個叫Pity Timer(非酋保護器)的保底機制。

  還是以明日方舟為例。前50次不出六星的話,從第51次開始每次抽取就增加2%的六星爆率。就算是“非酋”,最多也會在第99次時抽到1張六星。

  這種模式,有點類似war3的偽隨機機制:PRD機制(英文全稱Pseudo Random Distribution)。

  其實現在很多競技遊戲中的偽隨機機制,都是從war3演化而來的。就拿文章開頭的暴擊率為例。

  DOTA2中的主宰(劍聖)有一個技能叫“劍舞”,滿級時能提供35%的暴擊率。

  如果按照真實隨機來計算的話,連續打出2次暴擊的概率是12.25%。過高的暴擊概率或許是觀眾的一發興奮劑,但對嚴謹的競技賽事來說,這無疑是砒霜。因為一次人品爆發秒掉對方核心,可能毀掉一個職業戰隊1年的努力。

  為此,在不調整概率的情況下,V社學習了war3的機制,修改了相關的算法。目前DOTA2中所有的暴擊、閃避、擊暈、格擋效果都遵循PRD機制。

  所謂的PRD機制可以用一個公式概括:

  P(N)=C×N

  其中,C是一個小於1的常數(算法複雜,但有現成的數值表),P(N)是事件第N次嘗試時的概率。公式所表達的意思是,從事件發生起,每次不成功的嘗試都會增加1個固定值;成功後概率重新計算。

  這麽說可能有點雲裡霧裡,我用實際情況表達一次大家可能就理解了。

  主宰的暴擊率是35%。但第一次攻擊時,它的實際暴擊率(C值)只有16%。此後每次不暴擊的攻擊都會使暴擊率提升16%。一直到第7下時暴擊率為112%(理論上的數值),這意味著必出暴擊。

  DOTA2 WIKI提供的數據

  換句話說那就是,35%的暴擊率=攻擊7下至少出1次暴擊。

  將新機制代入計算後,你會發現,35%暴擊率連續觸發暴擊的概率僅有2.56%。相比之前,下降了近10%。這樣的計算方式降低了小概率事件的連續觸發,大大降低了運氣對比賽結果的影響;同時也規避了連續不觸發的情況,保證了玩家的遊戲體驗。

  除了DOTA2以外,LOL的暴擊率也是採用了類似PRD的偽隨機機制。

  早在2011年的一次美服更新裡,就有寫道這麽一句話:

  (參考譯文)我們已經改變了暴擊和閃避的計算方式。你現在會有更少的“幸運”或“不幸運”的場景,你不會有連續的暴擊或閃避,也不會被連續暴擊或閃避。你的平均暴擊率和以前一樣,如果你有50%的暴擊率,你攻擊100次仍然會暴擊50次。

  這樣的機制一方面在保護玩家的體驗,另一方面又讓結果傾向“隨機”。除此之外,我們還能從這個機制“預測並掌握”一些信息。

  比方說蠻王的被動技能“戰鬥狂怒煉獄”會提供最高50%的暴擊率。它的起始C值約為30%(參考DOTA2的C值)。如果連續3次平A都不出暴的話,那麽第4次是必然出暴的。

  因此實戰的時候,當你發現自己A了小兵3下都沒出暴擊的話,那麽第4下可以果斷選擇A對方的英雄了。

  當然競技遊戲裡還是有少部分設定是“真隨機”,比方說DOTA2藍胖的多重施法,是歐皇還是非酋全看臉。

三、計算機與偽隨機

  每次在提到遊戲偽隨機這個話題的時候,總離不開一句“至理名言”:計算機只能生成偽隨機。

  事實上,當68年前第一台商用計算機Ferranti Mark 1問世後,“計算機科學之父”阿蘭·圖靈就設計出了一個真隨機數發生器(True Random Number Generato,簡稱TRNG)。

  它的原理是根據系統內的電器噪聲,生成一個20比特的隨機數字串。經過近半個世紀的發展,TRNG的技術才真正成熟。現在的TRNG已經可以通過采集環境中的空調聲、雷暴聲、女朋友撒嬌等聲音來生成隨機數了。

  在這其中有一個比較知名的真隨機數網站:RANDOM.ORG。如果大家需要一些隨機數,可以去嘗試一下(不用梯子)。

  隨機數可視化後的圖像,孰真孰偽很明顯

  因此準確來說應該是:計算機可以生成真隨機但程序不能。

  那既然有TRNG,為什麽還有那麽多遊戲用程序生成偽隨機呢?

  這裡主要是成本和效率的問題。TRNG的調試、維護成本都很高,而且效率低下。中國一個大型網遊幾十萬人同時抽卡的運算量,TRNG可能都應付不過來;作為對比,偽隨機程序可以輕鬆搞掂上千萬的運算量。

  再加上現在的偽隨機數程序,已經快做到“以假亂真”的程度了。在諸多現實因素的綜合考量下,用偽隨機數的app、遊戲才會越來越多。

  所以啊,別去迷信那些所謂的“抽卡玄學”了。程序早就給你安排得明明白白了。

  參考資料:1、NGA:wjndante的“概率與隨機”三部曲之其一——如何用計算機生成“真隨機”2、DOTA2 WIKI、爐石傳說WIKI3、random.org網站上Dr. Mads Haahr的文章

  後記1、關於音樂app的隨機播放,最開始iTunes用的確實是真隨機。但後面有用戶投訴說,怎麽老是聽到重複的歌?你這是真的隨機嗎?你耍我呢??

  蘋果公司有苦說不出,最後把“真隨機”改成了”偽隨機”。改完之後,蘋果用戶紛紛點讚。我佛了。

  2、PRD機制中的C值計算是一個比較複雜的過程,有興趣的玩家可以去DOTA2 WIKI頁了解一下。另外因LOL沒有公開相關的C值,因此文中相關的討論參考了DOTA2中的數值,如果不太準確,還請大家見諒。

  3、DOTA2的暴擊、閃避、格擋等機制一開始採用的是真隨機的算法,但玩家試玩後表示並不習慣,後來V社還是沿用了先前war3的PRD機制,並做了改進。

  不得不說,war3真是一款偉大的遊戲。那時的暴雪擁有一群富有靈性、眼光卓絕的遊戲天才,真是當之無愧的遊戲夢工廠。

-END-

  文章首發於公眾號“遊戲大俠”(game_newbie)

獲得更多的PTT最新消息
按讚加入粉絲團