php Ubuntu centos 程序员 wordpress Android apache 云计算 linux google Python 编程 nginx java Firefox mysql shell 微软 开源 Windows

《遊戲設計師修煉之道:數據驅動的遊戲設計》一3.2遊戲中的隨機選擇

3.2遊戲中的隨機選擇

大多數遊戲都包括某種隨機選擇,以向結果中添加不確定性。少數幾種遊戲(比如《國際象棋》和《西洋跳棋》)不依賴於隨機選擇,能否贏得遊戲完全依賴於玩家的技能。這樣的遊戲稱為完全信息博弈(perfect information game),因為不會對玩家隱藏任何東西,所以他們能夠準確地知道從一個回合到下一個回合可能發生什麽。在這樣的遊戲中沒有隱藏的信息(例如,采用面朝下的方式發牌),也沒有隨機選擇。
大多數視頻遊戲都依賴於一些隨機選擇,它們不僅可以使玩家猜測接下來將發生什麽,而且允許重玩遊戲,因為每種玩遊戲的經歷都將不同,即使起始條件總是相同的。這樣的遊戲是不完全信息博弈(imperfect information game),因為玩家不能預測使用隨機選擇的遊戲動作的結果。《俄羅斯方塊》(Tetris,由Alexey Pajitnow設計)就是不完全信息博弈的一個示例,因為玩家不知道哪些方塊(拼板)將以什麽順序出現在屏幕的頂部。遊戲中有7種方塊,並且它們將隨機出現,讓玩家迅速斷定把它們放在哪裏。

3.2.1隨機數生成器

在過去的日子裏,用於計算機和視頻遊戲的處理能力非常有限,程序員可能創建一大張隨機數的圖表,並且遊戲引擎將隨機地選擇起始數字。例如,計算機將使用當前的毫秒來確定圖表中的起始位置。這種方法是有問題的,因為玩家可能從表格中發現結果的模式,從而能夠進行欺騙。此外,圖表中的數字實際上可能不是隨機的並且遵循看不見的模式,這同樣允許玩家發現重復的模式。
隨著遊戲平臺變得更強大,程序員轉而求助於偽隨機數生成器——生成長長的隨機數系列的算法,它們的值由稱為種子(seed)的固定值確定。這種方法的問題是:最終數字序列將開始重復,或者算法將會使用別的位置所需要的過多內存。用於生成偽隨機數的算法隨著時間的推移而變得更復雜,因此玩家不太可能發現他們可以做出反應的模式。
可以證明在遊戲制作期間極其有用的一個工具是文本捕捉程序,它可以把隨機數生成算法的結果加載進一個文本文件中。雖然設計師可以嘗試從視覺上分析結果,但是創建另一個用於在文本文件中搜索模式的工具將是有幫助的。只要沒有找到明顯的錯誤或者重復的序列,玩家將不太可能註意到遊戲中有什麽出錯了。如果檢測到問題,程序員就可能希望試驗不同的算法。

3.2.2把骰子用於隨機選擇

在棋盤遊戲中,隨機選擇可能具有多種形式。玩家可能需要使用轉盤來生成隨機數,或者從一摞紙牌中抽出一張紙牌使每一個回合都不同。通常,與棋盤遊戲最緊密關聯的方式是擲骰子(兩粒或更多粒骰子)來生成隨機數,然後把它們用於確定移動、戰鬥或其他遊戲動作。
一些遊戲使用單獨一粒6面的骰子(在遊戲用語中稱之為d6)來生成隨機數。在這種情況下,擲出任一數字的幾率是1/6(166%)。使用單獨一粒骰子只能提供有限數量的結果,並且出現任何一種結果的概率是相等的。
大多數遊戲傾向於使用兩粒6面的骰子(稱為2d6),以獲得更高的數字和結果的不同概率。與單獨一粒骰子不同,其中出現所有結果的概率是相等的,在擲兩粒骰子時,結果可能會有極大的變化。擲兩粒骰子可以出現36個可能的結果。註意:沒有結果“1”,因為每粒骰子的最小數字是“1”,並把它們相加到一起時,結果就等於“2”。表32顯示了擲2d6骰子所得結果的百分比,圖32則把結果顯示為形象的鐘形曲線。


image

image

image

在擲出“7”時很可能出現一個意義雙關的結果(在兩種情況下都是16.7%),註意到這一點是有趣的。在遊戲中使用兩粒骰子很流行,尤其是在賭博遊戲中。結果偏向於中間的數字(6、7和8),並且玩家極少擲出極端的結果(2和12)。在具有大約40個空格的棋盤上,比如《大富翁》的棋盤,中間的結果意味著以一種優雅的速度移動標記,急速或極其緩慢的移動只會偶爾發生。

3.2.3看待擲骰子的另一種方式

迄今為止,在遊戲中使用6面的骰子有一些缺點。擲多粒骰子並把數字累加起來意味著對於兩粒骰子最小的結果永遠不會是“1”,對於3粒骰子最小的結果永遠不會是“2”,對於4粒骰子最小的結果永遠不會是“3”,等等。此外,大多數結果都擠在鐘形曲線的中間,不可能給所有的骰子結果分配相等的幾率。還有其他一些方式處理兩粒骰子,並且可以得到比簡單的鐘形曲線更有趣的結果。
一種方法是擲出骰子並按順序處理結果,而不是把它們累加起來。例如,在一款遊戲中,玩家可以選擇一次一粒地擲出兩粒骰子(2d6)。他擲出第一粒骰子,並且在決定擲出第二粒骰子之前考慮結果。也許使用第一粒骰子的結果就可以讓他把他的標記移到一個具有積極結果的空格上,因此他決定使用這個結果,並且完全忽略第二粒骰子。或者,如果他不得不擲出第二粒骰子,那麽他將在第一次移動標記之後再把標記移動第二次擲骰子所確定的空格數——實際上是在同一個回合中移動兩次。在《西洋雙陸棋》(Backgammon)中使用了類似的方法,其中玩家可以把擲骰子的結果分給兩顆棋子,或者使用組合的結果來移動一顆棋子。
另一種方法是使用結果的矩陣。在這種情況下,對應於第一次擲骰子的行與對應於第二次擲骰子的列是交叉引用的。在這種情況下,有36個潛在的結果,並且獲得任何結果的幾率是相等的。例如,在表3-3中,第一次擲出的“3”與第二次擲出的“4”交叉引用,從而得到結果16。在一些遊戲中使用了矩陣,尤其是在紙面上的戰爭遊戲中解決戰鬥。

image

延伸阅读

    评论