[轉載]游戲的數值平衡性,非重置隨機
2011-11-03
  一只劍刃蜘蛛正在迫近你。它擊中你了,你卻揮空了。它再次擊中你,你又揮空了。如此重復,直到你沒有一絲還手的力氣。你陣亡了,而那只兩噸重的節肢植物則自得的趴在你的尸體上。難以相信?不。很難發作?是的。但是假設有足夠的玩家和足夠的工夫,這種狀況還是一定會發作的。劍刃蜘蛛不是個狠角色,只是玩家的運氣太差了。多么令人懊喪,這足以讓一個玩家保持這個游戲

  "游戲機制"是每個游戲設想師都會議論的術語。每團體都贊同游戲機制是游戲設想的一個主要組成局部。但是很少有人深化議論游戲機制的設想怎樣使玩家感到滿足。在這篇文章里,我會具體分析與角色扮演游戲親密相關的一個游戲機制--斷定玩家命中的隨機函數。好吧,讓我們帶著一點數學思想來看看這個游戲機制是如何被注釋的。

  增加挫敗感

  在開篇的情節里,一個增加挫敗感的辦法是增加隨機。幾個大型MMORPG,像地獄2,增加了命中和損傷的多樣性。Alex Chacha論述了其緣由,假設一個延續失利斷定的概率大于0,那么它在長工夫游戲里一個角色生命周期中呈現的幾率是非常高的。("Randomness," MUD-Dev Mailing List, February 2004)一旦這種狀況發作,必將給玩家帶來挫敗感。所以,在本文中,我們把這延續失利稱作挫敗感。

  增加挫敗感發作的一個手腕就是改動游戲中隨機模型的機制。例如,我們能夠改動隨機取樣的辦法,把重置隨機改為非重置隨機。

  首先,我們要了解這個詞語,這就需求一點點概率和統計學根底。這不會太難,由于概率實踐自從公元1654年以來就被普遍使用到色子和牌類游戲中了。在概率學里,一個隨機后果被提取進去的進程叫做取樣。有兩種取樣的根本辦法:重置(例如擲色子),非重置(例如抽取撲克牌)。二者的差異看起來很繁雜,但是其中的含義,是非常具有戲劇性的。

  回得手頭的題目來:為了增加挫敗,把重置隨機改為非重置隨機。根本上就是把擲色子方式改成抽牌方式。讓我們用關閉式游戲形式(OGC)來當作示例背景。這個零碎是基于威士智公-司的龍與公開城3.5版的。所以,我們要交換掉投擲20面色子,而從打亂的20張牌里抽取牌。

  這個機制的關鍵不同之處能夠表如今一個獨自的牌組。在重置隨機中,每次取完一張牌后,會把它放回到牌組中重新洗牌。而非重置隨機,則取完這張牌后間接拋棄,持續取剩下的牌。當牌組中的牌全被抽完時,拋棄的牌組成的排堆再重新洗牌組成新的牌組。來分析如何增加挫敗感,我們能夠把一張表示擊中的牌從牌組中取出,打亂剩下的19張牌。然后把這張擊中牌放到牌組的最上方。

  假定,在OGC規則中,一個玩家具有+0的近身攻擊加成,他面對進攻等級11的對手會有50%幾率擊中。這能夠用重置隨機來建模,依照50%的勝利概率。而非重置隨機的建模,能夠設想成10張擊中牌和10張落空牌。假設再需求些細節來統計,能夠把20張牌辨別賦值1~20。或許把10張牌賦值為"命中",另外10張牌賦值為"落空"。在非重置隨機里,玩家會在10張落空牌隊列中抽取一張,但是挫敗感遠遠少于在重置隨機中的抽取。那么這種差異究竟有多大?

  牌的計算

  計算重置隨機的挫敗概率是很繁雜的。設f為延續落空的次數,作為挫敗的后果,我們能夠思索10次落空。重置隨機中,這相當于帶有落空概率的二分法,來丈量延續實驗。我們能夠了解方程1,繁多失利概率是50%。邏輯比擬繁雜。一個隊列中10次失利的總概率就是10次失利概率的乘積。所以,在10次攻擊序列中,挫敗概率約即是千分之一。

  方程1.重置隨機的挫敗概率

  計算非重置隨機的挫敗概率就繁雜了,由于每次攻擊命中的概率受上一次命中或落空的影響。處置這個團圓概率題目的一般做法是計算出每種能夠發作狀況的數目,再除以一切能夠構成攻擊序列的次數之和。

  為了計算能夠呈現的挫敗事情,概率相當于20次攻擊中延續10次落空能夠性的數目。我們只做繁雜的分析并且要進一步限制挫敗,于是把第一次攻擊算作命中里的一次。意味著在OGC中擲出一個天然數20。由于挫敗(如10次延續落空)是不可變的,我們得出一個關于10個外面選出1個序列能夠性數目的方程。應用陳列組合的學問,化簡出方程的零解,見方程2。

  方程2.非重置隨機中構成挫敗的能夠性的數目

  然后計算19次攻擊中構成9次命中10次落空序列能夠性的總數。見方程3。

  方程3.非重置隨機中一切攻擊能夠性的數目

  用挫敗能夠性除以攻擊總數,我們得出了挫敗的概率,見方程4。所以,在20次攻擊中挫敗的概率約即是萬分之一。

  方程4.非重置隨機中挫敗的概率

  用等式1除以等式4,我們能夠看到非重置取樣少量的增加了挫敗的幾率,見等式5。為了簡化分析,我們把重置隨機的挫敗概率乘以2(或非重置挫敗概率除以2),由于非重置的概率是20次攻擊序列中的,而重置的概率是10次攻擊序列中的。

  方程5.非重置少量增加了挫敗

  很分明,這種機制增加了挫敗。此外,這種非重置機制保證了10次以上的延續落空是絕不會發作的(由于10次當前總會命中)。

  固然以上分析只是一種辦法,用來處置玩家攻擊對手的一種狀況(如近身攻擊+0對進攻等級11),但是我們異樣能夠分析出對應一切狀況的辦法。異樣的,這種分析也能夠用于任何發生挫敗的狀況。假設發生挫敗的最大限制容差是5次延續落空,那么牌組能夠被分紅兩個獨自的牌組,都是非重置的,以致于每個獨自牌組的延續落空都不會超越5。為保持分歧性,兩個牌組要被平均散布(例如75%勝利率=7/10+8/10)。

  上帝不擲色子

  采用牌組機制的消耗不是很高。繞開數學,從計算機迷信角度會很好的說明這點。每種機制都是由一個算法(準確的規則)來施行的。計算色子機制所消耗工夫的繁雜水平是很直觀的,見表1。

  表1.色子機制的算法概要

  牌組機制也不會太繁雜。一種原始的洗牌算法能夠讓線性工夫內每次抽取都是隨機的。所以,這意味著一次破費的工夫不會比19次重置的色子機制破費的工夫要多。這樣的洗牌在20次攻擊里只需求調用一次。在表2中,牌組機制的工夫繁雜度(施行算法總工夫消耗)比色子機制的要有上風,但不是很大。固然比色子機制要多一個方法,但從洗牌后的牌組中抽取一張牌(c)是微乎其微的操縱。此外,借助高效的洗牌算法,洗19張牌(s)并抽取1張與擲一個19面色子(d)沒有什么區別。

  表2.牌組機制的算法概要

  一種更遜色的算法會在每次攻擊里只洗一張牌,表示每次攻擊中只隨機一次,如表3所示。這種算法不會改動全體的工夫繁雜度,但是會使計算后果愈加平均,這樣每20次攻擊后就不會有提早(洗牌的工夫)。

  表3.使用逐漸洗牌法的牌組機制算法

  當然,與色子相比,牌組需求空間去存儲,但是關于玩家來說,就比方50字節只再多了19位而已。

  阿爾伯特·愛因斯坦已經陳說過另一個具體的機制,一個關于宇宙中元素結構的機制。當他論述量子物理中隨機模型時,他說:"上帝不擲色子。"而在RPG中,造物主則用紙牌來替代色子。 這要緊嗎?

  用色子還是牌組要緊嗎?二者的概率都是能夠疏忽的,看起來似乎不會惹起挫敗。但是,單單這很小的概率,像千分之一,就足以讓玩家有的受了。

  要了解這點,我們首先需求進修另一個團圓概率的散布。我們要曉得玩家會有幾種挫敗狀況呈現。每種狀況非常罕見,所以這該當是泊松散布,E(X)。這能得出一個幻想的近似值,如方程6所示。

  方程6.計算挫敗的泊松散布模型

  普通而言,泊松散布用來丈量單位工夫內發作事情的數目(λ)。我們已經計算出繁多狀況下挫敗的概率(p)。需求一定的是發生挫敗的攻擊序列的總數(n)。讓我們思索兩個具有足夠多攻擊序列的場所,大型多人游戲和單機游戲

  案例研討:MMORPG

  關于MMORPG中一個繁雜的例子,平均每個玩家一小時平均有1000次攻擊。精確的估量一下,會有100個10次攻擊序列(實踐上只要非常之一的延續失利序列是契合這個區分的)。在這里我們簡化一下,設定一個小范圍的MMORPG,平均天天會有100名攻擊是平均散布的玩家,并且相互的攻擊是獨立的。那么會得出100 序列/小時(24小時一天,一月30天)。這樣算來一個月會有72000個攻擊序列。由于基數非常大,概率又非常小,所以契合泊松散布,λ = n p。在方程7種解出挫敗的希冀值。

  方程7.重置隨機的每月挫敗希冀值

  所以,經過繁雜的預算,在一個不繁雜的游戲中,采用相似擲一個1d20色子的機制會構成每月有70次挫敗序列(比方延續10次攻擊落空)。但是,非重置隨機(20張的牌組機制)的挫敗希冀值在方程8中被計算進去。由于是20個的序列,取近似值,后果要除以2。

  方程8.非重置隨機的每月挫敗希冀值

  能夠看出,挫敗的發作會少18倍。挫敗的散布狀況以泊松散布方式在圖1中表現。由于只會呈現整數,在延續的泊松散布中取中點的近似值。

  圖1.非重置(藍)與重置(紅)挫敗的泊松散布

  依據散布圖的比照,很分明能看出非重置毫無疑問的增加了挫敗的發作。

  案例研討:單機RPG

  沒有實踐或理論的依據來證實這種辦法不能使用到單人和多人RPG的戰役中去。現實上,一個游戲賣出了百萬份拷貝,已經相當于多人在線游戲的希冀數字。這只是滯銷度與工夫的區別。泊松散布異樣能夠使用到單機游戲。假定一個單機RPG的玩家平均破費10小時在游戲上(究竟有很多玩家玩不久就保持了)。假設攻擊比率保持不變(每小時1000次),那么只需求賣出7200份游戲拷貝就能到達上述MMORPG一個月的成效。

  每種機制要設想的繁復而不繁雜

  愛因斯坦也說過:“凡事要盡量繁復,但不要太繁雜。”不要讓數學精度計算安排了你的分析。在把握了一個機制的微妙,確認它對游戲影響的條件下,恰當的數學計算是必要的。

  在這個例子里,我們比照了兩種機制的差異,不是依照一切使玩家挫敗的狀況,而只是針對一種機制的分析。我們簡化了一些狀況只是為了讓計算更繁雜明了。我們不是想把玩家的命中幾率掌握在50%以上或以下,也不是為了保持色子機制泊松散布的獨立性。聰慧的讀者該當發覺牌組機制一直沒有使第一張牌隨機化。這樣做是為了防止繁雜的概率計算。所以,我們的后果只是針對一套特別牌組的近似值。

  更多的準確分析對證實牌組機制的適用性沒什么協助。融會貫通只能讓設想師公道的處置題目,但不能準確的處置題目。在本文中,我們細心琢磨了一種游戲機制,疏忽了其他關乎玩家感受的元素。固然數學辦法很好把握,但是經過火析玩家挫敗類型來計算玩家喪失的散布還是一個需求毅力的進程。

  關于作者

  David Kennerly在美國與韓國指點制造了5款大型多人在線游戲。他參與韓國第一款全球化游戲The Kingdom of the Winds的外地化任務,并設想了Dark Ages: Online Roleplaying(昏暗之光)的社交零碎。在1997年加盟Nexon之前,他為20世紀福克斯公-司設想了X-Files Trivia Game,并擔任US Army韓國網絡的毛病保護。

  David鼓舞有發明力的開拓者和玩家。他協助組織了MUD-Dev研討會,并且創建了一個在線圖書館。David為Charles River Media,ITT Tech,Westwood College,Gamasutra.com,IGDA 撰寫設想文章。要與作者停止交換,請拜訪他的網站:http://www.finegamedesign.com/

  參考文獻

  Jay L. Devore, Probability and Statistics for Engineering and the Sciences. "Chapter 3: Discrete Random Variables and Probability Distributions." 6 ed. Brooks/Cole: USA, 2004.

  譯者注:

  重置和非重置的說法我覺得聽下去更好了解些,普通概率教材中翻譯為“放回取樣”和“不放回取樣”。文中的一些方程都是根本的概率學公式,很好了解。作者的觀念是非常有用的,由于CRPG中,特別是MMORPG,均衡性尤為主要。除了玩家之間的均衡,主要的是玩家與零碎間的均衡。采用了D20規則固然繁雜,但是在游戲中有很大幾率呈現文中提及的景象,例如平常跑團就常常能碰到延續手氣好或手氣壞的狀況。這在CRPG中會給玩家帶來挫敗感。采用牌組隨機能夠防止這種狀況,但也要量體裁衣,公道無效的去使用。

  以下給出兩種隨機抽取的一個繁雜算法示例(fake code):

  struct Sampling

  {

  int value;

  Sampling *prev;

  Sampling *next;

  }

  function SamplingWithReplacement

  {

  int r=Random();

  for(i=1;i<=n;i++)

  {

  if(i=r)

  {

  choose(Sampling);

  }

  Sampling=Samping->next;

  }

  }

  function SamplingWithoutReplacement

  {

  int r=Random();

  for(i=1;i<=n;i++)

  {

  if(i=r)

  {

  choose(Sampling);

  n--;

  Sampling->prev->next=Smpling->next;

  }

  Sampling=Samping->next;

  }