电竞比分网-中国电竞赛事及体育赛事平台

0731-85137865

010-68207668

產(chǎn)業(yè)雜談 / STANDARD
聯(lián)系我們


地址:長(zhǎng)沙市天心區(qū)雀園路568號(hào)創(chuàng)谷主樓2樓天心文化(廣告)產(chǎn)業(yè)園

電話:0731-85137865

郵箱:gongxin@www.wzwhfm.com


產(chǎn)業(yè)雜談 您現(xiàn)在的位置: 首頁電競(jìng)產(chǎn)業(yè) 產(chǎn)業(yè)雜談→ 提高游戲可重復(fù)性:經(jīng)典游戲如何巧用隨機(jī)生成?

提高游戲可重復(fù)性:經(jīng)典游戲如何巧用隨機(jī)生成?

日期:2020-01-10 作者:新浪游戲

隨著玩家對(duì)內(nèi)容消耗速度越來越快,隨機(jī)生成內(nèi)容對(duì)于開發(fā)者來說可以解決相當(dāng)一部分壓力,不僅可以滿足玩家需求,還可以提高游戲的可重復(fù)性。

那么,游戲里的隨機(jī)生成該怎么做呢?海外開發(fā)者John Harris分析了三種比較經(jīng)典的做法,以下是GameLook編譯的詳細(xì)內(nèi)容:

你在自己的游戲里對(duì)于隨機(jī)生成考慮過多少?如果沒有,那么我建議你花點(diǎn)時(shí)間想想它的本質(zhì),以及有可能出錯(cuò)的地方。

有些人覺得,游戲不應(yīng)該加入隨機(jī)性,或者說,類似搖骰子一樣的玩法應(yīng)該是“邊緣角色”。把所有的信息展示給玩家,如果攻擊生效,它就應(yīng)該是明確的,把不確定性排除。在一款動(dòng)作游戲里,如果你拿槍指著一名玩家并且扣動(dòng)扳機(jī),如果目標(biāo)是真實(shí)的,那就一定會(huì)擊中,不應(yīng)該被漂移或者描述數(shù)值干涉。

還有一些人,他們非常擔(dān)心人們對(duì)于90%擊中率的含義有所誤解,所以用混淆數(shù)學(xué)概念的方式擲骰子,所以實(shí)際上擊中率應(yīng)該是98%。

真正隨機(jī)的電腦游戲數(shù)量很少,在我們所處的宏觀現(xiàn)實(shí)世界里,隨機(jī)性實(shí)際上很少見。當(dāng)我們擲骰子的時(shí)候,決定數(shù)字的主要原因是我們用手扔出去的力道,而用隨機(jī)性來解釋它實(shí)際上出于無知。我們不知道骰子在空中運(yùn)行時(shí)候的運(yùn)動(dòng)矢量結(jié)果,也不知道它撞到桌子上有什么反應(yīng)、會(huì)如何翻滾和停止。

你可以在量子級(jí)別得到真正的隨機(jī)性,但這通常是傳統(tǒng)電子學(xué)無法覆蓋的。這個(gè)問題卻非常重要,有些Unix系統(tǒng)實(shí)際上通過玩家的精準(zhǔn)實(shí)際輸入等資源形成了無序狀態(tài)池,作為OS級(jí)服務(wù)響應(yīng)使用請(qǐng)求。這些請(qǐng)求十分重要,以至于可以用來阻塞、暫停請(qǐng)求過程,直到獲得足夠的數(shù)值,這種方式通常被用于加密。

不那么重要的請(qǐng)求通常由其他方式構(gòu)成。大多數(shù)時(shí)候,我們?cè)谟螒蚶镆龅闹皇莻坞S機(jī)數(shù)字生成器,它們很容易被理解、大多數(shù)編譯器的標(biāo)準(zhǔn)庫(kù)都有提供,如果有需要,你還可以自己做。

如果你打算在自己的游戲里加入隨機(jī)數(shù)字生成器,這些都是非常值得研究的,因此,本文主要介紹3種值得注意的隨機(jī)數(shù)字生成器,包括它們的特性、使用方式,以及在一系列經(jīng)典游戲中的使用案例。

《最終幻想1》:從預(yù)生成數(shù)字按順序讀取

原版的《最終幻想》以及史克威爾公司一些列的Famicom游戲,都是由傳奇8位素程序員Nasir Gebelli編程的,他在Apple Ⅱ電腦時(shí)代就已經(jīng)非常出名。Apple Ⅱ與Famicom都使用了6502微處理器,所以Gebelli寫這款游戲編程的時(shí)候,已經(jīng)掌握了大量技巧。

其中的隨機(jī)遭遇生成大多數(shù)是由向上或者向下走來決定,通過存儲(chǔ)在在ROM里的256個(gè)預(yù)置數(shù)值隨機(jī)決定的。玩家角色每走一步都會(huì)更新參數(shù),每個(gè)參數(shù)對(duì)應(yīng)一個(gè)閾值,如果參數(shù)低于閾值,就會(huì)觸發(fā)遭遇戰(zhàn)。

但是,這并非《最終幻想》原版游戲唯一的隨機(jī)數(shù)字生成器。在戰(zhàn)斗中,當(dāng)需要擲骰子的時(shí)候,就會(huì)用到類似系統(tǒng),它帶有完全不同的256個(gè)數(shù)值,而且是按次序讀取。與遭遇戰(zhàn)生成器的參數(shù)不同,這個(gè)生成器存儲(chǔ)在有電池供應(yīng)的RAM里,換句話說,如果在特定區(qū)域加載存檔之后遭遇戰(zhàn)斗,重新加載游戲,然后在相同區(qū)域還可以再次遭遇,而且會(huì)是同樣的敵人、同樣的難度。

有趣的是,雖然戰(zhàn)斗狀態(tài)的隨機(jī)生成器存儲(chǔ)于RAM中,但它并不與玩家的存檔發(fā)生直接關(guān)聯(lián)。戰(zhàn)斗開始之后,戰(zhàn)斗引擎做了一件非常聰明的事情。該游戲每?jī)蓭紩?huì)調(diào)用數(shù)字函數(shù),卻不使用結(jié)果,以至于你很難預(yù)測(cè)。

我們可以把這種行為叫做“旋轉(zhuǎn)”隨機(jī)數(shù)字生成器,即生成數(shù)字并非為它們的數(shù)值,只是為了得到數(shù)字。當(dāng)玩家移動(dòng)光標(biāo)的時(shí)候,隨機(jī)數(shù)字生成器會(huì)再次轉(zhuǎn)動(dòng)。將戰(zhàn)斗計(jì)算的結(jié)果與玩家操作時(shí)機(jī)關(guān)聯(lián)起來,做到每次游戲都帶來不重復(fù)的結(jié)果。盡管遭遇戰(zhàn)生成器每次加載存檔都會(huì)一樣,但只要玩家無法復(fù)制此前的精準(zhǔn)操作,戰(zhàn)斗狀態(tài)很快就會(huì)發(fā)生變化。

在RPG游戲里,這一點(diǎn)是尤為重要的,你需要確保玩家無法掌握隨機(jī)數(shù)字生成規(guī)律,才能保證戰(zhàn)斗系統(tǒng)不會(huì)形同虛設(shè)。如果提前知道某個(gè)區(qū)域有自己不喜歡的遭遇戰(zhàn)斗,那么玩家就會(huì)主動(dòng)到另外一個(gè)遭遇區(qū),甚至能夠利用這個(gè)漏洞區(qū)購(gòu)買物品,找到對(duì)戰(zhàn)斗最有利的道具。

唯一能夠避免這種情況的,就是獲取一些外部數(shù)值、外部無序資源,來通過編程產(chǎn)生多種運(yùn)行狀態(tài)。在Commodore 64上,聲卡芯片和噪音振蕩器上的輸出雖然不夠完美,但通??梢蕴峁┳銐蚝玫臒o序資源。有時(shí)候在NES和SNES上,一款游戲可以對(duì)一些或者所有幀調(diào)用隨機(jī)數(shù)字生成器。由于對(duì)玩家輸入的反饋發(fā)生在不同幀,隨著玩家行為給系統(tǒng)提供大量無序資源,就會(huì)導(dǎo)致游戲運(yùn)行結(jié)果出現(xiàn)越來越多的差別。

帶有實(shí)時(shí)時(shí)鐘的系統(tǒng)會(huì)它來初始化偽隨機(jī)生成器,不過,玩家通??梢栽O(shè)置時(shí)鐘,所以這種做法也是一個(gè)漏洞。如果始終有不錯(cuò)的分辨率是最好的,我們說的時(shí)間單位是以毫秒計(jì)的,如果通過這么小的單位取閾值,你可以得到讓玩家很難有效操控的數(shù)值。

我們?cè)倩氐健蹲罱K幻想》,大多數(shù)的休閑玩家是很難找到隨機(jī)生成器漏洞的。但是,如果玩家出于某種原因想要避開或者觸發(fā)一個(gè)特別困難的遭遇戰(zhàn)該怎么辦?

在游戲的一個(gè)房間里,有個(gè)叫做Warmech的偽boss,他出現(xiàn)在一個(gè)房間里的時(shí)候被遭遇的概率很高,但它是第8組遭遇敵人的一個(gè),只有三個(gè)數(shù)值可以觸發(fā),也就是說,256場(chǎng)戰(zhàn)斗才會(huì)遭遇三次。如果你知道戰(zhàn)斗生成器的狀態(tài),就可以故意觸發(fā)遭遇戰(zhàn),讓它必定發(fā)生。

《超級(jí)馬力歐64》:線性同余數(shù)生成器

一個(gè)非常受歡迎的偽隨機(jī)數(shù)字生成器叫做線性同余數(shù)生成器(Linear Congruential Generator,簡(jiǎn)稱LCRNG),它們?cè)诒徊倏氐臅r(shí)候不會(huì)產(chǎn)出破壞游戲的效果。如果想要詳細(xì)了解它的解釋,讀者們可以到維基百科查詢。

好的LCRNG在于它是不計(jì)算順序的遭遇,它的數(shù)值是跳躍式的,但同時(shí)會(huì)覆蓋所有的步驟。

你從子數(shù)值開始,通過基礎(chǔ)操作產(chǎn)生結(jié)果數(shù)值,后者會(huì)返回調(diào)用者并且再次生成數(shù)值,你最終可以得到每個(gè)子數(shù)值產(chǎn)生的一系列數(shù)值,最終形成循環(huán)。隨機(jī)數(shù)字生成器需要避免這種情況,但這也恰好是LCRNG的優(yōu)勢(shì):除非域內(nèi)數(shù)值耗盡,否則絕不會(huì)重復(fù)。

《超級(jí)馬力歐64》就使用了這樣的隨機(jī)生成器,在YouTube做挑戰(zhàn)視頻的pannenkoek還專門發(fā)布過相關(guān)視頻。有一個(gè)問題在于,它的算法會(huì)在65114個(gè)數(shù)值之后循環(huán),因?yàn)樗纳善髦挥羞@么多可能的結(jié)果,所以,如果玩家操作超出這個(gè)數(shù)值范圍,是得不到對(duì)應(yīng)隨機(jī)數(shù)字的。

《口袋妖怪綠寶石》:不良種子行為

操控《最終幻想》的隨機(jī)數(shù)字生成器可以決定敵人出現(xiàn)的時(shí)機(jī)與具體種類,但這需要玩家投入大量的時(shí)間嘗試?!恶R力歐64》的單個(gè)生成器就可以影響金幣復(fù)活與敵人行為,但這并不會(huì)對(duì)游戲帶來巨大影響?!犊诖帧穼?duì)隨機(jī)數(shù)字生成器的使用頻率更高。

當(dāng)一個(gè)寶可夢(mèng)產(chǎn)出之后,結(jié)果數(shù)值可能會(huì)存在很長(zhǎng)時(shí)間,其中有些數(shù)字是神秘的、玩家不可見,但卻有長(zhǎng)期影響。如果掌控這些數(shù)值可以給游戲帶來破壞,由于玩家之間可以相互交易,所以最終傷害的不僅僅是游戲本身。

由于生成器在《口袋妖怪》系列里十分重要,現(xiàn)代很多的續(xù)作都給偽隨機(jī)性使用的特別強(qiáng)大的算法,比如Mersenne Twister算法。由于該系列的受歡迎度,玩家們探索了很多方式破解該系統(tǒng)。

這些作弊方式其中一個(gè)目的是得到更好看的寶可夢(mèng),雖然不能帶來戰(zhàn)斗優(yōu)勢(shì),但它們卻是十分稀有的。在Ruby、Diamond和Emerald系列里,隨機(jī)數(shù)字生成器每幀都會(huì)變化,戰(zhàn)斗中的變化頻率提高為兩倍,更不用說到處可見的隨機(jī)性。不過,Smogon網(wǎng)站專門用了一頁研究如何操控該游戲的生成器,因?yàn)樗幸粋€(gè)非同尋常的缺陷:開機(jī)的時(shí)候,Emerald并不會(huì)把內(nèi)部時(shí)鐘運(yùn)用到生成器上,而是把它重置為0,其他兩款游戲只有在斷電之后才會(huì)這么做。

由于游戲的生成器按計(jì)劃處理種子數(shù)值,因此決定是否產(chǎn)出特殊寶可夢(mèng)的有特定幀數(shù)。了解這些幀數(shù)并不能保證得到好看的寶可夢(mèng),但至少概率會(huì)大幅提升。

需要注意的是,該游戲的生成器會(huì)利用玩家ID和秘密ID,這些都藏在存儲(chǔ)文件里,而且不易改變,因此,一個(gè)存檔上很容易抓到的寶可夢(mèng),換到另一個(gè)就可能需要等很久。

來源:GameLook

新浪聲明:新浪網(wǎng)登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其描述。


版權(quán)聲明:

1、 網(wǎng)站注明“來源:中國(guó)通信工業(yè)協(xié)會(huì)電子競(jìng)技分會(huì)”的所有作品,其他媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)必須注明:“來源:中國(guó)通信工業(yè)協(xié)會(huì)電子競(jìng)技分會(huì)”。

2、凡本網(wǎng)站注明“來源:XXX”的作品,均轉(zhuǎn)載其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。本網(wǎng)站提供的資料如與相關(guān)紙質(zhì)文本不符,以紙質(zhì)文本為準(zhǔn)。