我試圖設計一個簡單的角色扮演遊戲,其中包括戰士,巫師,牧師,小偷等典型角色類型。我需要建議一個好方法來設置類層次結構。設計角色扮演遊戲中的典型角色的階級層次
我最初的嘗試是創建一個類型爲「角色」的類,並從「角色」製作戰士,巫師,牧師,派生類型。
但後來我認爲創建一個「Character」類然後使用裝飾器模式可能會更好。所以說一個戰士裝飾者,嚮導裝飾者等。
或者有沒有不同的方式,會更好?
我試圖設計一個簡單的角色扮演遊戲,其中包括戰士,巫師,牧師,小偷等典型角色類型。我需要建議一個好方法來設置類層次結構。設計角色扮演遊戲中的典型角色的階級層次
我最初的嘗試是創建一個類型爲「角色」的類,並從「角色」製作戰士,巫師,牧師,派生類型。
但後來我認爲創建一個「Character」類然後使用裝飾器模式可能會更好。所以說一個戰士裝飾者,嚮導裝飾者等。
或者有沒有不同的方式,會更好?
我會使用策略和裝飾模式的組合。你最初的建議就像是一種戰略模式方法。
嘗試區分字符類型和字符特徵。角色類型可以是戰士,巫師,牧師等......並將其設計爲一種戰略模式,從而形成一些層級樹。
性格特點會是這樣的火元素,水元素,黑色的力量,要素...
例如一個戰士角色可能會選擇火與水之間的元素作爲他的本土起源,就像海盜(aarrrr!)或鐵匠一樣。如果您按層次設計,則註定會失敗,因爲這會讓您的層次樹大小爆炸。
這樣的角色特徵應該用裝飾模式來實現,因爲它是與角色概念正交的概念。所以你基本上會創建一個戰鬥機角色幷包裝一個水元素裝飾者來獲得一個海盜(aarrrr!)。或者創建一個嚮導角色並在他周圍包裹一個黑暗的魔法裝飾者以獲得一個黑暗法師。或者:製作一個嚮導角色,並在他周圍包裹一個水元素和一個黑魔法裝飾師,以獲得沼澤地精靈。
一些食品的想法:
如果你決定將所有字符 有點石成金的能力,然後再設計 魔法般的性格特徵。
如有必要:組織 裝飾者在某種 層次結構。你可能會有一個「元素」(水,火, 地球,風)裝飾器層次結構和 「魔法類型」(黑色,白色)裝飾器 層次結構。
玩得開心!
我會隨着你的初始嘗試,創建一個Character類,然後通過繼承擴展功能。儘管所有角色都會執行相同的操作(使用物品,攻擊和使用技能),但結果會有所不同(方法重載,即)。我認爲使用這個模型會更清晰,我不確定裝飾器。
這是一個可以在理論和實踐層面上回答的問題。理論見http://en.wikipedia.org/wiki/Liskov_substitution_principle。
但我認爲你有興趣練習。在這種情況下,問問自己:「巫師是一個角色」,即你可以用一個具有通用角色的巫師來做所有事情嗎?如果是這樣,那麼繼續並繼承。這將使您可以使用更多抽象的代碼與字符類型,而不是特定的實例。當你想以各種方式組成一個可能的擴展子集時,例如,如果你的角色可以同時是牧師,巫師,牧師和其他人,那麼裝飾器就更有用了。
我認爲你可能會在這匹馬前面放馬。
您的第一個業務訂單不應該確定「我如何表示角色?」它應該確定「我想代表什麼?」這就是說:一個工具來幫助創建d20角色,Shadowrun,Mongoose Traveler,GURPS角色創作,WH:黑暗邪術角色創作; 「我自己酷酷的基於d20的RPG視頻遊戲」,一款角色和冒險/聚會管理套件軟件供您出售,等等。 以實現中性術語定義這一點。
在您成功確定要製作的內容後,請創建您要製作的詳細定義。這樣做的一種方式是列出所有主要名詞和動詞(人物,嚮導,戰士,創建,保存,刪除,複製等),並開始理解您需要表達的各種概念之間的關係。然後把每個主要名詞分解成它的組成部分。 (字符:可以是一個類可以是一個或多個類,有一些設備,有一個實力,有生命點,有魔法點,有一些主要和次要屬性。)繼續這個分解,不能使用實現中立術語(如整數等)。
然後回頭看看你的定義和分解,並確定是否有任何明顯的矛盾陳述,如果是的話,擺脫矛盾。如果不是,則按照所描述的層次結構來組織數據。在我的例子中,將Character,Class,Equipment和Primary Attribute作爲類是合適的。
一定要保持所有這些「事實」的組織和使他們的關係清晰,無論是在書面和圖表。從那裏你應該能夠開始考慮實現細節,比如嚮導從角色派生出來的類層次結構等等。
你可能還想看看其他人如何實現東西看this other SO question鏈接到實現d20的視頻遊戲引擎。 (即Baldurs Gate)
+2如果我可以:) – Diadistis 2010-01-23 13:44:00
感謝Diadistis。我現在正在製作我自己的紙筆RPG,所以我不得不考慮OP的問題等等。爲了解決這個問題,我也在編寫軟件。:-)我發現這個特定概念變得複雜的速度令人驚訝。保持簡單對我來說是一個持續的挑戰。 – 2010-01-23 14:06:16
這取決於你想要RPG角色引擎的靈活性。如果你繼承你的角色類,那麼你將角色多樣化限制在編譯時。如果您使用設計模式(如裝飾器或行爲模式),則還可以通過組合裝飾器或行爲對象在運行時創建字符類。 (雖然你不會使用「嚮導」裝飾器,而是使用「魔法」裝飾器來創建嚮導,精靈等裝飾器被重複使用,這是他們的力量。)
這真的取決於什麼你想學習,基礎類設計(字符按子類)或現代面向對象設計(字符按構圖)。如果你是一個絕對的初學者,可以用第一種方法去了解原理。如果你已經知道這些原則,你應該自己寫一本關於design patterns的好書,並將它們應用到你的遊戲中。
這個評論最好的回答我的實際問題。但感謝@Jason D的偉大建議 – mikedev 2010-01-31 09:24:39