經(jīng)典游戲制作教程
peng
1.游戲制作的主要流程
-------------------------------------------------------------------------------
電腦游戲開發(fā)小組中的任何一個人(這個角色通常有策劃擔任),只要有了一個新的想法 或念頭,就孕育著一個新游戲的誕生。在這個創(chuàng)意被充分討論之后,再加上對其操作過程的趣味性及市場銷售的可行性的預測等因素的準確判斷,一個完整的策劃方案才可能產(chǎn)生。在經(jīng)過充分的討論后,策劃人員必須將討論的重點寫成文字,也就是提出完整的策劃方案,經(jīng)決策者同意認可后,才能進下一步的工作。這份策劃方案就像一部電影的劇本,它必須完整地涵蓋整個游戲的故事、流程、內(nèi)容、方式、游戲畫面、角色造型、 場景規(guī)劃、人工智能、硬件配備、市場評估等。對整個游戲過程的詳細描述及實施規(guī)劃都應 記錄在案。 當進入創(chuàng)作過程之后,策劃還必須隨時和美術設計師和程序設計員保持聯(lián)系,以免游戲程序的編寫失控。策劃應能對游戲設置的內(nèi)容與精神了如指掌,與各個小組及時溝通,并且控制整個游戲制作的進程。
2.游戲設計基本論
-------------------------------------------------------------------------------
要設計一個游戲,首先你必須要確定幾個重要方針,第一是你要設計的游戲是屬於那一種類型,第二是時代背景,第三是模式,第四是程式技術,第五是表現(xiàn)手法,第六是市場定位,第七是研發(fā)時間,在掌握上述七個方針之後,你就可以再做詳細的規(guī)劃內(nèi)容及調(diào)配資源,那麼何謂是七項方針呢? 筆者以范例來說明之!
一、類型:
所謂的類型是指這個游戲所著眼的一個游戲方式,通過這個方式來使玩者達到娛樂的目的,這個游戲方式有專有名詞來各別予以命名,茲如下述:
(1) RGP角色扮演:
這個類型的游戲以通過故事劇情牽引來使玩家能溶入主角所存在的一個世界,這類型態(tài)的游戲多半透過戰(zhàn)斗升級系統(tǒng)及人物對話的方式來一步步完成設計者所布下的劇情路線,最具代表的作品有日本史克威爾所設計的 "太空戰(zhàn)士系列" 及國內(nèi)大宇資訊所設計的"仙劍奇?zhèn)b傳",當然還有很多部作品例如"神奇?zhèn)髡f"等也是此中的佼佼者。
在RGP的類型中,在近幾年來又分支了幾個類似的型態(tài),例如說Blizzard的"暗黑破壞神"Dirblo"被定位為"動作RPG",因其動作成分相當高所至,而"神奇?zhèn)髡f"、"超時空英雄傳說"則被定位盡"戰(zhàn)略RPG",只因戰(zhàn)略成分比重較高所以又有別於傳統(tǒng)RPG。
(2) SLG戰(zhàn)略:
談起戰(zhàn)略游戲,大家最耳熟能詳?shù)膽侨毡竟鈽s公司所出品的"三個系列",KOEI的三國志風靡東亞,從一代進化到現(xiàn)階段的六代皆為玩家們所津津樂道,而所謂的戰(zhàn)略游戲則是透過經(jīng)營→戰(zhàn)爭→擴大領土三個手段來蠃得游戲最終目標,一般而言動態(tài)成分少,最較偏重於花費腦力的游戲,但從WestWood的新型態(tài)戰(zhàn)略游戲"沙丘魔堡"問世之後,戰(zhàn)略游戲也有了重大的分野,一是以KOEI代表的三國志系列被稱為回合制戰(zhàn)略游戲,一是以WestWood代表的C&C及Blizzard所代表的魔獸爭霸被稱為即時制戰(zhàn)略游戲,和回合制所不同的是,即時制擁有較多可由玩家與電腦互動的機會,比較不花費腦力,所進行的 方式是建設→生產(chǎn)→攻擊→殲滅,在業(yè)界有句俏皮話是這樣說的:「玩回合制游戲像是自己當了個大將軍(元首),運籌帷幄決勝千里之外,而玩即時制游戲則像是個士官長(部隊指揮官),只能一味的打打殺殺」由此你可以了解到這兩個型態(tài)的異同的了。
(3) ACT動作:
所謂的動作游戲其實就完全靠玩家的反應來做過關的條件,較有名的像DOOM、古墓奇兵、QUAKEⅡ 等,在動作游戲中也分支了相當多的類型,例如快打旋風、鐵拳Ⅲ等被定位為格斗型態(tài),主要游戲方式就是二人到四人互相對打一直到分出勝負為止,而DOOM、古墓奇兵則被定位為3D動作冒險游戲,主要目的為殺敵闖關,再來像阿比逃亡記、黑暗之心被定位為橫向卷軸游戲,游戲方式就是以攻擊跳躍等動作來走過一連串的關卡,表現(xiàn)方式多為2D卷動畫面的方式在進行,再如飛龍騎士、極上瘋狂大射擊則被定為動作射擊游戲,游戲方式就是閃躲射擊沖過火網(wǎng)進而殲滅守關魔王為止,這些分支型態(tài)有共 通特點卻又那樣的不同,這也是動作游戲吸引人的重要原因。
(4) PZL益智:
這類型的游戲以趣味性的思考為游戲的主軸,內(nèi)容可以包羅萬,思維模式也可朝物理性及邏輯性方向著眼,具代表性的是大宇資訊的"臺灣十六張麻將"、"大富翁"、"倉庫番"等,而棋盤式的思考方式著名的有"決戰(zhàn)中國象棋"及光譜資訊的"五子棋大師"等,這些游戲入手容易且不分男女老少皆喜歡的特性,使得益智型態(tài)的開發(fā)較有市場,成本也較低。
(5) ADV冒險:
冒險游戲的內(nèi)涵多半脫離不了解謎的成分,是的!這類型的游戲讓玩家抽絲剖繭的找出設在游戲背後暗藏的謎底,以順利完成游戲,具代表作有惡靈古堡、異星搜奇、幽魂等,這類型的游戲年齡層較高,比較不適合國內(nèi)廠商來研發(fā)。
當你在構思一個新的游戲企劃時即應預先想的所屬意的類型,然後才進行下一步的計劃,一般而言國內(nèi)市場接受度最高的莫過於 RPG角色扮演類型,這也是為何國內(nèi)廠商會如此的大力研發(fā)RPG型態(tài)的游戲。
二、時代背景:
對於游戲美術來說是一個很重要的方針,因為決定一個時代背景所意味的是資料的搜尋工作方便與否,與美術人員在制定造形時需依據(jù)的范例;以國內(nèi)市場來說多半能接受中國古代時代背景,基本上時代背景有好幾種,例如說WestWood的紅色警戒架構在公元2000年左右的未來,而魔獸爭霸則定在虛幻的歐洲中古世紀中,三國志定位在漢朝末年,星海爭霸架構在外太空世界,軒轅劍則定在春秋戰(zhàn)國時代等。
時代背景絕對是企劃人員在第一階段規(guī)劃整個游戲時已先決定好了,如此美術人員才能放心的去搜集資料。
三、模式:
當決定好類型及時代背景之後,再來就開始要去構思游戲中所要呈現(xiàn)的模式,如假設你的背景訂在古代中國,而類型是定為即時戰(zhàn)略,這時你必去思考出游戲內(nèi)容的進行方式,可能你的游戲需要生產(chǎn)的因素,這個因素是什麼? 可以是糧食、礦產(chǎn)及木材,也可以是火山能源、石油、太陽能或天然氣等,隨著你故事情節(jié)上的需要而去制定項目,在作戰(zhàn)方式上你所設計的模式可能會去考慮到地形因素、天候因素及資源因素,而且會大量運用到各種戰(zhàn)術及攻擊方法等,因為如此所以同一種類型的游戲雖多,但模式上卻各有特色各有偏重的游戲路線,也各自聚集了擁護者,這就是模式設定的一個重要性,切記千萬不可去抄襲他人所定的模式,因為這樣一來,當你所設計的游戲完成之後,眼尖的玩家們會把你的產(chǎn)品以過時抄襲為由而棄如敝履,這在這劇烈競爭的國內(nèi)市場而言是無法存活太久的。
四、程式技術:
無論你對一個游戲想得多好,架構設計多龐大,如果程式人員本身的技術無法配合的話,那其實一切還是流於空談,所以在設計一個游戲之前必要先去徵詢程式人員的意見,在現(xiàn)在這個環(huán)境中不僅程式人員要會Windows98及Wi-ndows NT相關技術,一個完整的系統(tǒng)分析及系統(tǒng)規(guī)劃是不可缺少的,如此可以避免掉在程式中不可預期的錯誤出現(xiàn),而且在一個游戲設計中最好有二個程式人員在運作,一個負責內(nèi)部程式 (游戲核心引擎) ,一個負責外部程式(介面程式),這樣方可發(fā)揮完整的戰(zhàn)力。
五、表現(xiàn)手法:
在這個環(huán)節(jié)中,企劃人員、程式人員、美術人員要做完善的溝通及討論,一般我們知道大部份的電腦游戲是256 色的系統(tǒng),在這些游戲中對於色盤的控制有相當嚴苛的要求,為了達到最好的視覺效果,美術人員通常會向程式人員要求多重色盤的資源,而程式人員則會考量到切換時的狀況及記憶體配置是否能完全充份,在系統(tǒng)上的問題確定之後,企劃人員會提出呈現(xiàn)效果的建議,例如說爆炸效果的表現(xiàn)方式,由內(nèi)而外擴張到消失的火焰激烈型或包容大量煙霧的燃燒型,這要由企劃人員依故事內(nèi)容來給予定義,同時以物理性邏輯給予美術人員一個建議,再由美術人員前去繪制。
還有一個例子,以"C&C之紅色警戒"與"AGO Empir世紀帝國"的海岸來說明,在"AGO Empir 世紀帝國"的海岸表現(xiàn)是靜止的,海水不會流動,最多只有魚在海中央跳躍,而"C&C"之紅色警戒"的海岸表現(xiàn)手法是會流動的,但海中沒有任何的特異之處,這兩種表現(xiàn)手法各有各的好處及考量,但以筆者而言仍較偏愛"C&C之紅色警戒"。
游戲內(nèi)容的表現(xiàn)手法通常伴隨著同類型游戲間的相異處而有不同的評價及支持者,而不光是美術效果的表現(xiàn)手法,企劃人員構思的游戲玩法及程式人員的程式表現(xiàn)都有密切的關系。
六、市場定位:
不論你所設計的游戲構想如何的好,如果你沒有去清楚的定位出你的市場走向,那麼到時制作完成的游戲軟體可能會面臨到銷售不佳的窘狀,所以在設計游戲之前你得知道你所定位的族群在那里,從下表中你可作一個市場定位的叁考:
年齡層 教育程度適合的類型內(nèi)容
7~12歲 國小動作、益智較多趣味性、教學性
13~18歲 國中、高中動作、益智、 較多思考性質(zhì)、圖形精美化同 角色扮演、戰(zhàn)略時又較多反射
19歲以上 低知識水平益智、動作較暴力及冒險、趣味性質(zhì),操 作簡單
19~30歲 大專、大學以上角色扮演、戰(zhàn)略富含多重思維性,可以影射周 、冒險、模擬、 遭事物,解謎及創(chuàng)造性運動
七、研發(fā)時間:
這是企劃人員在初步規(guī)劃中的最後一個項目,針對上述的制作方針你必須對美術人員及程式人員安排一個完整的SCHEDULE,從這個SCHEDULE中去研判律發(fā)時間,從企劃的角度來說,為了不使良好的點子被其他游戲公司搶先推出,同時也要避免推出後模式已落伍,一個游戲的研發(fā)最好在一年內(nèi),最多不可超過18個月,以成本控制的角度來說比較符合獲利標準。
假設你規(guī)劃這個游戲需要一年的時間,那麼你就要去區(qū)分出美術制作時間 (第一線)及程式制作時(第二線)間的差異,并考量推出DEMO 版及游戲完成的時間,在適當時機打出游戲知名度,為游戲銷售上打下一記商機。
制作流程
一個游戲的制作如果不能充份控制整個作業(yè)程序,那即有delay 的危險,大家都知道游戲軟體delay對於銷售上的影響會有多大,所以如何盡量避免de-lay是每個游戲設計者應極力去避免的,而要去避免游戲開發(fā)作業(yè)上delay的情況最重要的是嚴密控管作業(yè)流程及計劃表。
那麼究竟游戲制作流程是一個什麼樣的情形呢? 首先企劃人員在執(zhí)行制作的前一個月即要定出企劃大綱及搜集可用資源,并經(jīng)程式人員及美術人員確認後開始執(zhí)行,我們以一個即時戰(zhàn)略的游戲來說明,在制作分期程式人員即投入地圖編輯器的撰寫,而地圖編輯器的邏輯設定要由企劃人員先期規(guī)劃,然後程式人員才根據(jù)企劃人員的規(guī)劃而進行程式寫作。
在此同一時期美術人員即開始分工合作,一般一個游戲工作小組會有四位美術人員,他們分別負責造形、人物動作、介面、地圖四個部分來制作,但這只粗分法,國內(nèi)游戲公司較常使用這樣的組合,在國外美術人員分為造形、人物動作、介面、地圖、片頭、過場、後制分鏡、場景等九大部份,每個部份皆可能都有二人以上在作業(yè),并有一名監(jiān)制在執(zhí)行風格及水準的品質(zhì)控管,這些人統(tǒng)一由後制人員來與程式人員做交圖及配合修圖等溝通上的交流,所以說後制作美術人員的成敗實關系到整個游戲品質(zhì)的高低。
由於程式人員在設計地圖編輯器時需要利用到一些圖素來做測試,所以地圖圖素設計人員要先一步繪制出程式人員所需要的圖素,
在程式人員測試通過之後方可進入大量生產(chǎn)的階段,由於地圖編輯器的設計者多半直接負責游戲引擎的制作,所以在初期企劃人員便開始著手人工智慧AI的邏輯判斷作詳細的敘述,以期在程式人員撰寫地圖編輯器之後能立即作人工智慧AI的撰寫,而在此同時負責撰寫介面的程式人員亦與負責介面設計的美術人員作密切的配合,開始著手制作各個介面,因為介面不僅在游戲中是一個主司控制整個游戲的操作盤,同時也是一個游戲的外觀,一個擁有優(yōu)良創(chuàng)意的介面是很受 玩家喜歡的。 在測試地圖編輯器時,程式人員亦需要利用移動物件(人)來測試地圖上的障礙物判斷及最短路徑搜尋法,所以設計人物動作的美術人員在此時要先去做出一組人物動作供程式人員作測試,待程式人員把地圖編輯器制作出來之後,人物動作設計的美術人員則只要不斷的做并不斷的把圖給程式人員即可。
3.游戲設計十誡律
-------------------------------------------------------------------------------
Travis S. Casey
1. 編寫你所喜愛的游戲
不要人云亦云。只要你和你的朋友喜愛就可以了。 同樣道理,不要編寫某個游戲主題僅僅因為它當前流行而已。編寫你所喜歡的題材, 這樣才能激發(fā)你的熱情。
2. 經(jīng)驗是最好的老師
學習游戲編程最好的方法就是閱讀大量的游戲程序。玩和分析這些游戲,然后設計 你自己的游戲或擴展游戲。我最主要的經(jīng)驗都是角色扮演類游戲,我的許多游戲范 例也來自它們,但思路卻適用于所有類型的游戲。 我閱讀過大量的RPG類游戲,粗略算算大約有七十多個。其中大部份我都玩過,精 通四十多個。不但玩和精通這些游戲,我還分析它們。是什么使得這些游戲好或者 不好?我如何修改它?哪些部份表現(xiàn)的出色?哪些部份不盡人意?為什么? 玩和分析過其它游戲后,我把這些知識用于我自己的游戲。比如在“超級英雄”類 游戲中,“斗士”和“英雄”在使用了“指數(shù)特性的換算法”取得較好的效果。如 果我想設計“超級英雄”類游戲時,我就知道“指數(shù)換算法”很可取。這樣的分析 能給你許多被驗證過的思想用于你的工作中。
3. 測試、測試、再測試
測試你的游戲,盡可能多次的玩。最好當你不在場的情況下,讓別人來玩,過后再 告訴他們。(讓別人當你不在的時候玩游戲稱為:“盲測”) 還有,推敲你的規(guī)則。考慮假設情況,解決概率復雜性。比如,如果你正在設計一 個RPG,試著找出平均人們用弓箭從一米、五米、十米、五十米和百米范圍內(nèi)射中 人形大小目標的百分機率。對于二戰(zhàn)游戲,檢測你的監(jiān)視器和解決一個小步兵摧毀 一輛坦克的機率。反復計算在不同的條件下,如:不同的地形、夜間等等。這將有 助于你找到在數(shù)學中出錯的地方或建立了一個不好的假設。
4.學習背景知識
如果你想編一個中世紀的神奇游戲,就要去讀中世紀的文學和歷史。讀有關魔法的 書及現(xiàn)有的中世紀傳奇游戲。對其它類型的游戲也是如此,如果你想做一個越南戰(zhàn) 爭的游戲,就應去讀有關戰(zhàn)爭的正史及野史,特別是戰(zhàn)略、戰(zhàn)術的分析。 所有的背景知識可以用于幾種途徑:首先,能幫助你創(chuàng)造出逼真的角色。另外它能 減少你在術語及背景知識方面,出現(xiàn)重大錯誤的可能性。當然,資料應該本身就很 有趣。如果對于所要學的都不感興趣,那為什么還要編寫這方面的游戲呢?
5. 正規(guī)教育
選一門介紹概率和統(tǒng)計的課。試著讀一些游戲方面的數(shù)學理論。你可能覺得那沒什 么用,但它能幫助透視算法的掌握。斟酌你的英語(或其它你發(fā)表游戲所用的語言) 當游戲描寫得好的時侯,就更容易學,至少不能有大量的語法錯誤。 如果你想制作電腦游戲而沒上過任何編程課時,不妨學幾門。你可能學不到什么編 程序的具體東西,但一門好的課程可以教會你如何組織程序使之更容易維護和發(fā)現(xiàn) 錯誤。 建立一個“參考文獻庫”,它是一系列和你所制作游戲工程相關的游戲、書籍資料。 當你清晨三點突發(fā)靈感而圖書館卻已關門的時侯,它將是非常有用的。
6. 抽取些時間
一個游戲就像孩子,當它剛出生時,它的父母總認為它是完美的。從你的游戲中抽 出些時間去得到一些新的觀點,避免都耗在上面。一遍遍的重復這一過程。
7. 保留記錄
確定你有一份以上的游戲拷貝。如果你是在電腦上輸入的,就各保持一份硬盤和軟 盤拷貝,另外再打印出一份清楚的最近版本(如每月打印一份,如果你干得快的話每 星期打印一份)。你不會覺得拷貝太多,因為你的好朋友們會來向你借或者想擁有拷 貝。而且這些拷貝能夠減少你因為硬盤癱瘓或丟失筆記本等原因造成的丟失機會。 同樣道理,保留舊版本的拷貝是有好處的。如果你在游戲測試時發(fā)現(xiàn)新的辦法還不 如舊的好,而你卻已將舊版本的扔掉了,這該怎么辦?至少保留一份最后版本之前 的拷貝,同你當前版本的拷貝放在一起。
8. 其它注意事項
優(yōu)秀的規(guī)劃和書寫是好的,但精美的視覺化說明對你的銷售大有益處。如果你要自 己動手,就學一些桌面出版,或找一些現(xiàn)成的插圖(比如:剪輯藝術或政府出版物) 或找別人幫你畫些插圖。 找個從事印刷業(yè)的人,和他探討一些盡可能廉價的方法。低價格可以有助于銷售, 低成本則有利于你的收益。
9. 記住這只是個游戲
不要因為制作游戲而忽略你的現(xiàn)實生活。如果有人不喜歡你的游戲,別介意。不用 擔心別人竊取你的創(chuàng)意。記住第一條誡律,從你的所做中得到樂趣就行了。
10.沒有第十條了 :-)
另外,這里有一些來自湯姆(“棱鏡游戲”的主持者)的額外忠告,感謝湯姆!:
1.不斷的創(chuàng)新是非常好的。如果你游戲中的所有東西都令人似曾相識,就好像是 偷來的。如果所有東西都與眾不同又會讓人感到陌生。常見題材單一獨到的構思是 好的,但會使得你的游戲看來像個“變體”,而兩個熟悉題材精明的創(chuàng)意則會使游 戲有新鮮感同時容易上手。因此不要試圖徹底從新發(fā)明某樣東西,而應把當前所擁 有的主意清晰化、簡潔化的用于擴展關鍵觀念的創(chuàng)新和趣味方面上。
2. 修正和雕琢你的游戲創(chuàng)意。測試不僅僅為了清除游戲和規(guī)則介紹中的錯誤,而 且就像一個討論會,對照他們已經(jīng)取得的東西,游戲設計師能夠發(fā)現(xiàn)什么是真正所 要表達的。如果你將測試留到最后,這一發(fā)現(xiàn)將對你沒有什么好處。如果你進行早 期的測試和經(jīng)常從眼前試著發(fā)現(xiàn)這一游戲真正要表達的,你就能常常很大的改進這 一游戲。 “ Alpha”測試就像在問:“是否真有這個游戲?”“我得到它了嗎?”“ Beta ” 測試看來在問:“是否用了最好的方法達到這一效果?”,“這是游戲的精煉嗎? 或者它是否能被簡化或刪除?”“是否所有主要的游戲系統(tǒng)協(xié)同工作,給予了我所 期待的游戲體驗?”“ Gamma ”測試又像在問“如何才能改善游戲的收支平衡 和介紹呢?”許多設計師停留在Alpha(生產(chǎn)一個吸引人但卻是次品的游戲)之后或 者從Alpha直接到Gamma,跳過了Beta(生產(chǎn)一個好的但還不夠完美的游戲)。 通常有必要靠你的親密朋友/游戲小組及早的進行足夠的批評性分析,幫助你發(fā)現(xiàn)如 何才能改進一個已經(jīng)相當不錯的游戲。
我的一些其它建議:
在我制作游戲過程中,從沒有清晰明顯的測試“階段”。我傾向于每個階段都做一 點。我修改一些系統(tǒng),拋棄或替換一部分,改善其它的收支平衡和介紹,差不多是 在同時做的。這些部分來自于我所從事的主要游戲類型的設計-宇宙類RPG,你必須 在一個時間內(nèi)干一個部分的事情。 關鍵在于去尋求達到你最好的作品。用不同的方法嘗試,直到找到適合你的方法, 然后用它鉆研下去。
4.游戲的劇情
-------------------------------------------------------------------------------
游戲劇情的重要是不言而喻的,特別是RPG游戲,相信廣大玩家對"仙劍奇?zhèn)b傳" 熟得不能再熟了,這個游戲以劇情取勝(他的音樂也相當不錯),各大媒體對他的 評價也都是以劇情為主,這個我就不多說了.
我也曾看過許多文章提到劇情的重要,這些文章說的相當好,相當有價值,但基 本上講述的是劇情的要點及注意事項.而我將從另一個方面去分析游戲的劇情.
游戲的劇情是游戲的靈魂(當然除少數(shù)不需要劇情的游戲,如體育類,賽車等), 游戲通過各種各樣的方法讓玩家融入到設定的劇情上以打動玩家,但如果游戲 的劇情不吸引人,那么無論游戲的表現(xiàn)手法有多好也不能達到目的,但是怎樣 的劇情才吸引人呢.
事實上中國與外國玩家有著很大的文化差異,這一點可以從各地所出產(chǎn)的游戲 上看得出來,歐美的游戲大多重視人物與場景的直實性,看上去就像電影,而東 方的游戲普遍追求漫畫式的效果.但這兩種風格哪種適合我們呢?答案是兩種 都適合.不要忘記我們的玩家基本上是青年一代,對新事物的接受是相當快的, 對歐美的游戲我們的玩家接受得很快,從這可以看出國外的游戲制作是相當出 色的,就拿我自己舉個例子,前兩天我得到一款"生化危機2"的游戲,游戲開始 的動畫可以說是扣人心弦,并且很好的襯托出了主題.而第二種風格的代表作 品就是"仙劍"了.
游戲所要表現(xiàn)的內(nèi)容必須能夠被玩家接受,而且還要有創(chuàng)新,這樣的劇情才說 得過去.現(xiàn)在我們有一個很好的觀察點,那就是電影,外國的制作精良的大片 擠進中國后給我們的沖擊多么大,而中國傳統(tǒng)題材的作品也給我們留下難忘 的印象.
我們不得不承認,在技術上我們與國外的游戲制作公司相比還差了一截,這 使得許多很好的題材我們不敢用,因為以現(xiàn)有的技術還不能很好的將他表現(xiàn) 出來,如果勉強還可能會起反作用(這是有例子的).
在這里我只是起一個開頭的作用,什么樣的劇情適合大家也不是一下能說清 楚,希望廣大游戲愛好者能積極討論這個問題,這也是我們中國游戲業(yè)現(xiàn)階斷 的一個重要的有待解決的問題.
5.角色扮演游戲的升級系統(tǒng)研究
-------------------------------------------------------------------------------
在一般的角色扮演游戲中,人物的成長是一件相當重要的事,無論是角色扮演游戲或是目前熱門的策略型角色
扮演游戲(簡稱RSLG),這些升級系統(tǒng)都是游戲的一個重要部份。不過在一般的角色扮演游戲中,人物的升級
以及成長卻有著很多種的處理方式。在本文中,筆者將為各位介紹各種角色扮演游戲中常用的升級方式,并且
分析各種作法的優(yōu)缺點。
在一般的角色扮演游戲中,最常用的升級方式就是亂數(shù)式的成長方式。在這種模式中,當一名角色獲得升級的
時候,程式會使用亂數(shù)來決定升級的各項指數(shù),也就是說所有的升級數(shù)值都不是在控制中,而是依據(jù)一個亂數(shù)
表來決定提升的數(shù)值。這種升級的方式是如何處理的呢?
當人物到達升級的標準時,就會進入處理升級的副程式中,在這個副程式中程式會依設計者所定出的一個亂數(shù)
范圍,來計算出這名角色所得到的升級指數(shù),然後將這個數(shù)值加到需要增加的屬性上。
在這種亂數(shù)決定升級的情況下,玩者所能夠獲得的升級數(shù)值,完全是由設計者訂定的范圍中求出,無論是升級
的上限或是下限都是在這個范圍內(nèi),絕對不會有意外的情況發(fā)生,就算是設計者如何提高上限與下限,都不會
改變這些。這種作法雖然可以讓設計者很輕松的訂出升級的上下限,但是卻不能控制升級時的不利因素,那就
是亂數(shù)的成份實在是太高了。若是有一名角色因為運氣不好一直只有獲得下限的升級數(shù)值,那麼它可能會比一
個一次就獲得上限升級數(shù)值的角色要弱。舉例來說,當這個亂數(shù)的范圍是一到五的時候,若是角色甲和角色乙
分別獲得上限和下限的升級數(shù)值,那麼會發(fā)生以下的狀況:
┏ ┳ ┳ ┓
角色甲 角色乙
┣ ╋ ╋ ┫
LV1 10 10
LV2 15 11
LV3 20 12
LV4 25 13
LV5 30 14
LV6 35 15
┗ ┻ ┻ ┛
各位看看上表,是不是可以看到角色甲在第二級時的數(shù)值就已經(jīng)和角色乙第六級的數(shù)值是相同了。由於亂數(shù)式
的升級方式會有這種不公平的情況發(fā)生,因此常會使得玩者的努力需要有一些運氣的成份在里面;若是運氣不
好,可能原本的努力都無法發(fā)揮所要的功效。
由於亂數(shù)式的升級方式有這樣的缺點,因此有兩種不同的改進辦法,首先就是百分比制的升級方式。在這一種
辦法里,角色在升級的時候還是使用亂數(shù)來進行,不過在每一個數(shù)字的出現(xiàn)比例上卻做了一些調(diào)整。例如同樣
的升級的范圍還是從一到五,但是每一個數(shù)字的出現(xiàn)比例調(diào)整如下:
┏ ┳ ┓
數(shù)值 出現(xiàn)比例
┣ ╋ ┫
1 10%
2 20%
3 40%
4 20%
5 10%
┗ ┻ ┛
各位從上表中可以看到,在這一種處理方式上,每一個數(shù)字出現(xiàn)的比例做了一些調(diào)整。原本的亂數(shù)式中,每一
個數(shù)字的出現(xiàn)比例都是相同的,就以上面的例子來說,每個數(shù)字出現(xiàn)比例是百分之二時,因此上限和下限的數(shù)
值比較容易出現(xiàn),發(fā)生不幸的情況比較多;但是在這樣子調(diào)整後,上限和下限的數(shù)值出現(xiàn)的機會就減低了不少
,會發(fā)生不幸的情況就降低了。
雖然這樣的作法可以降低不幸的發(fā)生機會,但是還是無法完全的克服所有的狀況,因為還是有可能會發(fā)生相同
的狀況,使得玩者陷入屬性不佳的情況中。因此另外一種改良的方式~修正值升級方式就這麼出現(xiàn)了。
其實修正值的升級方式和原本的亂數(shù)處理法在計算的時候是完全相同的,只不過是它在升級到一個程度的時候
,會來做一次計算并且取出一個修正值,以免玩者因為運氣不好無法達到升級的功效。
在這種作法上,上半部和亂數(shù)式的做法完全相同,唯一的不同是下半部的副程式。而這個副程式的作用就是在
幫一些升級時運氣比較不好的玩者取得一點修正值。
我們就以前面所說的升級的數(shù)值是從一到五來做個例子,讓玩者每升五級時就可以取得一點修正值。因此若是
一名角色在五次升級中都只有獲得一點的升級值,那麼目前它的數(shù)值就是:
10 + 1 + 1 + 1 + 1 + 1 = 15
不過在我們的升級表內(nèi)中等的數(shù)值是三,因此當角色升了五級之後,應該可以獲得以下的數(shù)值:
10 + 3 + 3 + 3 + 3 + 3 = 25
這麼說來這名角色因為前五級的升級運氣不好,因此少獲得了十點的升級指數(shù),所以我們就在這一次把這個缺
少的數(shù)值以修正值的方式補足,從修正值的計算式中可以得出:
25 - 15 = 10
就將這個數(shù)值加到角色的屬性中,讓角色不會因為運氣太差而有不利的情況。若是角色在升級中都獲得比較高
的數(shù)值,那麼修正值就是負的,也就表示不需要有修正值的存在了。
這種作法完全是為了不讓玩者因為升級時運氣不好使得屬性太低,因此只能算是修正部份數(shù)值的作法,雖然不
能完全解決亂數(shù)式的問題,但是可以將不利的因素降低,因此在某些游戲里的確有采用這樣的作法。
除了亂數(shù)式的作法外,還有一種是表列式的升級方式。在這種升級方式中,每一名角色的升級數(shù)值都是設計者
已經(jīng)訂好的,完全不會有任何的變動。它的好處是設計者可以完全掌控所有的升級狀況,但是相對的這樣子的
表格需要占掉較多的程式空間。
舉例來說,某個游戲若是采用這種升級方式,那麼在它的記憶體中就需要有這樣子的升級表格。若是游戲中有
七項屬性會獲得升級,等級共有一百級的變化,那麼基本上它就需要有七百個不同的數(shù)值表放在程式中。若是
一個數(shù)值用了兩個位元(BYTE),那麼就需要用到1K左右的記憶體。如果說游戲中有四名角色,它們升級情況
又都是不同,那麼占掉的記憶體就將近有5K了。這麼算起來各位可能覺得不會很多,但是當這種資料越來越多
的時候,記憶體的消耗也就越來越多,使得程式的空間也越來越小了。
由於表列式的作法會使得升級的情況比較單調(diào),因此大多數(shù)的游戲并不愿意采用這種作法,再加上這一類的作
法對於記憶體的占用空間也比較高,因此如果不是必要,大多數(shù)都不會用這種作法。
除了以上這些作法之外,還有一種就是指數(shù)型的升級方式。這種作法其實就是表列式的改良,因為它將升級的
表格簡化成一個叁數(shù),在升級的時候就依這個叁數(shù)來計算能夠獲得的升級值。現(xiàn)在我就舉一個例子來示范。目
前有一名角色的屬性以及升級指數(shù)如下:
o 生命:10 生命指數(shù):10
o 法力:10 法力指數(shù):10
o 力量: 3 力量指數(shù): 2
o 智慧: 2 智慧指數(shù): 2
o 反應: 2 反應指數(shù): 2
o 體能: 4 體能指數(shù): 2
o 運氣: 1 運氣指數(shù): 3
那麼當他獲得升級的時候,程式就會依這個升級指數(shù)來計算升到下一級時的各項屬性值。因此在升了一級之後
,各項屬性的數(shù)值就是以下的數(shù)字:
o 生命:20
o 法力:20
o 力量: 5
o 智慧: 4
o 反應: 4
o 體能: 6
o 運氣: 4
用這種作法,在程式內(nèi)不需要復雜的升級屬性表,只需要幾個簡單的叁數(shù)就可以,若是能將各項叁數(shù)之間的關
系加以變化,并作一些運算,那麼可以使升級時的變化更多。舉例來說生命的增加和體能有關,或是法力的增
加和智慧有關,那麼在計算起來時會有比較多的變化,使得整個升級的表現(xiàn)不會太單純。
以上這些作法大部份的變化程度都不會很多,沒有辦法表現(xiàn)出一個人的成長情況。就像我們有時候會形容一個
人「大器晚成」或是說他「小時了了」這樣子的情況都不能表現(xiàn)出來。因此後來又有一種成長曲線的升級方式
。在這種升級方式中,我們首先要訂出幾種不同的升級情況。像是:
A. 平衡成長
B. 大器晚成
C. 小時了了
要達成這種效果,我們需要將升級的總等級數(shù)分成幾個階段。我們以一個可以升到一百級的游戲來說,將每十
級分成一個區(qū)塊,就可以訂出這三種成長情況各要給它多少的數(shù)值。
其實這種曲線式的升級方式,在處理上和指數(shù)式的作法差不多,只不過指數(shù)式的作法一個人物每一種屬性只會
有一個數(shù)值,這個數(shù)值是不會改變的。但是在曲線式的作法中,會依不同階段有不同的升級指數(shù),才可以造出
不同的成長情況。我們就以一名「大器晚成」的角色來說,這一類的角色在開始成長的比較慢,但是當人物成
長到一個階段後,成長的速度就會加快,因此我們可能在前兩個階段只給他們一點的升級指數(shù),後面幾個階段
再給他們較高的升級指數(shù),使這名角色會在游戲後期升得比較快。
反過來說,若是要設計一名「小時了了」的角色,那麼我們在初期可以給他較高的升級指數(shù),但是到了後期就
要給它較低的指數(shù),如此一來就可以表現(xiàn)出這樣的情況。
事實上,在游樂器中的「光明與黑暗續(xù)戰(zhàn)篇」就曾經(jīng)用過這一種作法,使得游戲中的每個角色都有各自不同的
特色。特別是有些屬於大器晚成的角色,曾經(jīng)因為初期成長的速度太慢而被玩者拋棄,但是後來知道這名角色
的特性之後,再回過頭來訓練的這種情況,正是這種曲線式升級的特色。這種作法使得角色除了單純的數(shù)字屬
性之外,還增加了一些隱藏的特性,會讓游戲更有味道。
如果以筆者個人的喜好來說,我是比較欣賞曲線式的升級方式,因為這種方式比較可以隱藏角色的特色,也不
會因為數(shù)字的變化太過單調(diào)而讓玩者覺得過死板。比起亂數(shù)式的不定性和升級指數(shù)式的單純來說,這一種作法
可以說是兼具了兩種的特色,同時還有全新的表現(xiàn),是一種不錯的升級方式。只惜目前國內(nèi)的游戲很少使用這
種作法,大多還是采用亂數(shù)式的作法,對於國內(nèi)玩游戲的玩者來說,實在是有些可惜,因為大家沒有辦法體會
到這種作法的優(yōu)點。
6.游戲中的智能系統(tǒng)處理
-------------------------------------------------------------------------------
游戲中的智能對手
AI在游戲中最普通的形式是創(chuàng)建計算機控制的對手。因為大多數(shù)游戲是單人游戲,所以要設計游戲者在游戲中必須戰(zhàn)勝對手。為了達到這個目的,你可以使用某種類似A*搜索的簡單AI算法,以幫助對手穿過迷宮向游戲者發(fā)起進行。你也可以使用簡單的算法預測游戲者的反應。
但是,記住沒有必要創(chuàng)建世界上最強大的對手。你的對手只要能給游戲者提供足夠的挑戰(zhàn)性就可以了。還有,要注意游戲的內(nèi)容。例如:一個戰(zhàn)棋式RPG游戲中策略占的是主要地位;而在純RPG中故事情節(jié)和角色開發(fā)就更重要一些。千萬不要因為計算機對手太強大而讓游戲者們陷入失敗的泥沼。
游戲中的非智能對手
通常,在游戲開發(fā)中AI技術是與計算機對手緊緊聯(lián)系在一起的。這是因為早期的大部分類似角棋的游戲是一對一的。但是,任何好的探險游戲或RPG 游戲開發(fā)者都知道,AI同樣可以用于非對手角色。例如:如果你正在建立一個RPG游戲并且你想讓你的世界活起來,這就是說,讓城市里的人以智能的方式活動,那么你可以使用某種算法確定在一天中的某個時候,角色應該在那里。你可以使用類似于AI算法如A*來輔助你將一個對象從一處移動到另一處并繞過障礙物。
游戲中的智能系統(tǒng)
游戲中的AI在本質(zhì)上是最具有模仿性的,但它們基本上是依賴一些AI要素。 你可以將所有具有決策功能的對象在一個游戲中融合為一個整體。例如:在一個戰(zhàn)爭游戲中,你的各個部分可以依據(jù)各自所處的具體環(huán)境來作出各自的AI決策。
使用這種方法,你得把精力集中于怎樣在各個獨立的決策個體之間建立聯(lián)系,以及這些聯(lián)系怎樣才能使游戲成為融會貫通的整體。是用一個高級決策影 響其它決策,還是各個決策個體之間平等地互相影響呢?舉個戰(zhàn)爭游戲來說, 你有十輛坦克,它們的思維模式基本相同。所以它們都決定去攻擊敵人陣營中 HP值最低的一輛坦克。但是這時其中一輛坦克說:“這個敵人歸我了!”那么 剩下的九輛坦克就應該依據(jù)這條信息各自調(diào)整下一步的攻擊目標。當你建立智能個體時,要考慮在一個智能系統(tǒng)整體環(huán)境下,它應該如何行動。
7.電腦游戲中的人工智能制作
-------------------------------------------------------------------------------
電腦游戲隨著硬件執(zhí)行效率與顯示解析度等大幅提升,以往很多不可能或非常難以實現(xiàn)的電腦游戲如此都得以順利完成。雖然電腦游戲的呈現(xiàn)是那么地多樣化,然而卻與我們今日所要探討的主題,人工智能幾乎都有著密不可分的關系。
在角色扮演游戲中,程序員與企劃人員需要精確地在電腦上將一個個所謂的“怪物”在戰(zhàn)門過程中栩栩如生地制作出來;所以半獸人受了重傷懂得逃跑,法師懂得施展攻性法術。
目前能讓人立刻想到與人工智能有密切關系的游戲有兩種:
一是所謂的戰(zhàn)棋/策略模擬游戲,二則是棋弈游戲。人工智能的比重與深淺度,在不同的游戲類型中各有不一。有的電腦游戲非標榜著高人工智能不可,不然沒有人買;有的則是幾乎渺茫到讓玩家無法感覺有任何人工智能的存在。
導向式思考
AI最容易制作的的方式,同時也是早期游戲AI發(fā)展的主要方向就是規(guī)則導向或稱之為假設導向。在一些比較簡單的電腦游戲中,程序員可以好不困難地將游戲中的規(guī)則與設定轉(zhuǎn)化成一條條的規(guī)則,然后將它們寫成電腦程序。讓我們以角色扮演游戲為例。決大多數(shù)的企畫在設定所謂電腦怪物時,所設定的屬性通常有以下幾種:
生命值 攻擊力 防御力 法力 屬性
最后一個“屬性”是我在設定時喜歡增加的項目之一。透過這項屬性的設定,我可以把怪物設定成“貪生怕死的”,也可以把戰(zhàn)士設定為“視死如歸”。以目前我們所掌握的資料,在戰(zhàn)門系統(tǒng)中的大綱如是誕生了:
規(guī)則一
if (生命值< 10) // 邊臨死亡了嗎
{ if (屬性== 貪生怕死)
結果 = 試圖逃跑
if (有任何恢復生命值的物品或法術可用)
結果 = 使用或施展相關物品或法術
}
規(guī)則二
if (可施攻擊性法術 && 有足夠法力)
{
結果 = 施展攻攻擊性法術
}
由以上一連串的“如果--就--”規(guī)則設定,建立了最基本的AI。說這樣的制方式只能建立基本AI其實并不當然正確。只要建立足夠及精確的規(guī)則,這樣的方式仍然有一定水準的表現(xiàn)。
規(guī)則導向的最大優(yōu)點就是易學易用。在沒有深奧的理論概念的前提下,仍有廣大的使用群。所以很多老道的玩家常常沒兩下就摸清楚敵人的攻擊策略,移動方式等等。
推論式思考
相信曾經(jīng)接觸過電腦語言課程,或是自習過相關書籍的朋友們,都曾曾經(jīng)聽過一個著名的程序,那就是井字游戲。用井字游戲作為討論AI的入門教材,我個人覺得是最適當?shù)睦印;蛟S有人還不知道井字游戲怎么玩。只要任何一方在三乘三的方格中先先成一線便勝利了。我們在前面談過的規(guī)則導向,在這里也可以派得上用場。
if任何一線已有我方兩子&&另外一格仍空//我方即將成一線嗎
結果 = 該空格
if任何一線已有敵方兩子&&另外一格仍空//防止敵方作成一線
結果 = 該空格
if任何一線已有我方一子&&另外兩格仍空//作成兩子
結果 = 該空格
有一次我在某本電腦書上,同樣地也看到某些以井字游戲為介紹的范例。不同的是,我?guī)缀蹩床坏饺魏我?guī)則導向的影子。但在仔細分析該程序碼后,我得到了極大的啟發(fā),原來AI是可以不用這么多規(guī)則來制作的。它用的方法正是在電腦AI課程中重要的概念:極大極小法。我在這里只說明這法則的概念。繼續(xù)以井字游戲為例,電腦先在某處下子,接著會以假設的方式,替對方下子,當然,必須假設對方下的是最佳位置,否則一切則毫無意義。在假設對方下子的過程中,自然又需要假設我方的下一步回應,如此一來一往,直到下完整局游戲為止。 底下是節(jié)錄書中的程序片段:
bestMove(int p, int*v)
{ int i;
int lastTie;
int lastMove;
int subV;
/*First, check for a tie*/
if (isTie()) {
*v=0;
return(0);
};
/*If not a tie, try each potential move*/
for (*v=-1, lastTie=lastMove=-1,i=0;i<9;i++)
{
/*If this isn't a possible, skip it*/
if (board[i]!=0) continue;
/* Make the move. */
lastMove=i;
board[i]=p;
/* Did it win? */
if (hasWon(p)) *v=1;
else{
/*If not, find out how good the other side can do*/
bestMove(-p,&subV);
/* If they can only lose, this is still a win.*/
if (subV==-1) *v=1;
/* Or, if it's a tie, remember it. */
else if (subV==0){
*v=0;
lastTie=i;
};
};
/* Take back the move. */
board[i]=0;
/*If we found a win, return immediately
(can't do any better than that)*/
if (*v==1) return(i);
/*If we didn't find any wins, return a tie move.*/
if (*v==0) return(lastTie);
/*If there weren't even any ties, return a loosing move.*/
else return(lastMove);
};
國外的一些論壇曾舉行過256字節(jié)的游戲設計比賽。作品非常多,其中有一件作品正巧也是井字游戲。作者用區(qū)區(qū)兩百多行就寫了與上述程序演算方式完全相同的作品,可見功力確實了的。另外,我也很希望類似的活動能在國內(nèi)推展起來。對了,在這樣的比賽條件限制下,除了匯編語言外,幾乎沒有其它的選擇了。 .386c
code segment byte public use16
assume cs:code, ds:code
org 100h
tictac proc far
start:
push cs
pop ds
mov ax,0B800h ; 清除屏幕
mov es,ax ;
xor di,di ;
mov cx,7D0h ;
mov ax,0F20h ;
rep stosw ;
xor cx,cx ;
mov dl,5
loc_1:
call printBoard
loc_2:
mov ah,8 ; 等待按鍵
int 21h
movzx bx,al
sub bl,31h ; 如果不是1..9
jc loc_2 ; 則重新輸入
cmp bl,8
ja loc_2
cmp data_1[bx],al
jne loc_2
mov byte ptr data_1[bx],'x'
dec dl
jz short loc_3
mov al,'o'
call bestMove
mov [si],al
call isWin ; 判斷是否已取得勝利
jnc loc_1
loc_3:
call printBoard
mov ax,4C00h
int 21h
data_1 db '12'
data_2 db '3456789'
data_3 db 0
tictac endp
printBoard proc near
mov si,offset data_1
mov di,548h
mov cl,3
locloop_4:
movsb
add di,5
movsb
add di,5
movsb
add di,133h
loop locloop_4
retn
printBoard endp
isWin proc near
mov bx,1
mov bp,3
call sub_3 ; 檢查橫向是否完成
inc bx
inc bx
dec bp
dec bp
call sub_3 ; 檢查縱向是否完成
call sub_4 ; 檢查斜向是否完成
clc
retn
isWin endp
loc_5:
stc
retn
sub_3 proc near
mov ah,3
mov si,offset data_1
loc_6:
mov di,si
call sub_5
add si,bp
dec ah
jnz loc_6
retn
sub_3 endp
sub_4 proc near
mov di,offset data_1
inc bx
call sub_5
mov di,offset data_2
dec bx
dec bx
call sub_5
retn
sub_4 endp
sub_5 proc near
mov cl,3
locloop_7:
cmp [di],al
jne short loc_ret_8
add di,bx
loop locloop_7
add sp,4
jmp short loc_5
loc_ret_8:
retn
sub_5 endp
bestMove proc near
mov bx,31FEh
mov cl,9
mov di,offset data_1
locloop_9:
cmp [di],bh ; #empty?
jne short loc_12 ; #no, skip
mov [di],al
pusha
call isWin ; #CY: Win
popa ;
jnc short loc_10 ;
mov bl,1