我記得我的第一個Java項目(面向對象)的想法。這個項目是一種非常基本的角色扮演遊戲(NO GUI,它非常基礎),所以我有一些OOD問題。Java面向對象的設計
可以選擇一個角色類(你知道,戰士,巫師等等),在未來他可以選擇幾個角色,這樣他就可以擁有一名玩家(至少現在沒有玩家類)一個派對)。角色創建後,他可以與其他敵人作戰(由程序控制)。
- 每個字符內有一個像一些信息:一個字符類(如戰鬥機),等級,防禦等級,能力(力量,敏捷,智慧等)。
- 每個班級都有一個庫存。
每個人物都有像一些方法:
攻擊(使用武器,如果他是一個施法者,然後施展法術也可以 使用攻擊)。
- 保衛(如防禦法術,或使用能力像招架注意:改變 甲流
一些字符類(如嚮導)可以施法大部分法術是進攻還是防守,這樣他們就可以利用攻擊。或防守方法。 讓我們說,castFireball可以調用攻擊(20),例如,一些法術 可以做其他事情一樣castHeal其治癒的特點和變化 當前生命值。
購買(以備將來) 。對於所有字符當然也是一樣的。
- 從庫存中添加/刪除。
建議實施:。 我想到了創建一個抽象類(類似級別的信息,防禦等級,能力(如力量,敏捷,智慧等)和一些方法,如攻退可守的其他具體的班會擴展字符,所以它看起來像:
Character (abstract)
Character Class (like fighter)
Level
Hit Points
Current Hit Points
Armor Class
.
.
.
Inventory (List)
Strength
Dexterity
Wisdom
Fighter Wizard Rouge Cleric (All extends Character)
問題:?
- 這裏使用抽象類被認爲是在這種情況下,一個好的設計,你會建議使用的接口和變化t他設計?
- 我是否應該爲力量,智慧等能力製作另一個類,或者它可以作爲角色的一部分嗎?
- 我應該爲庫存創建另一個課程嗎?我認爲這可能會更好,對吧?
- 通過使用枚舉來存儲所有武器,裝甲和盾牌(可能是其他未來的東西)的數據是一個很好的解決方案?
- 法術 - 我不確定什麼是實施它們的好方法。我可以創建一個法術類 ,每種法術都有靜態方法(如castFireball,castHeal方法)。施放法術只與法術角色有關(並且每個角色都有一個已知的法術列表,因此他只能施放他知道的法術)。這是一個很好的實現方法嗎? 我也可以使用txt文件並從文件中獲取相關數據,但我不喜歡這個想法。
請記住,它應該是基本的,但應該爲將來的更改和添加計劃。它看起來像:
你想如何攻擊?
- 匕首(主武器)
- 劍
- 發法術
你要哪一種法術施展?
- 火球
- 治癒
- 冰風暴
你打一個火球敵人,並處理20損害。
這是非常含糊,但你明白了..
非常感謝!
我認爲是這樣的plalx。事實上,我會進一步詢問爲什麼一個角色只能是一個類。在某些遊戲中,只有技能,在這樣的遊戲中,我可以想象檢查'this.skills.armorwearingskill> = armor.skillrequredToWear'等等。我認爲這爲需求變化提供了更大的靈活性。而且它仍然可以與一個控制這些方面的角色類相適應,如通過一個角色類與其他屬性上的一組約束關聯起來的角色類。處理不斷變化的需求的能力在這裏是值得的。如果他們不改變,繼承是好的。 –
我在這裏看到你的觀點。你是對的,角色類只是一個屬性。如果一個角色可以多於一個類,那麼使用聚合和合成是比繼承更好的設計。如果一個角色只能是一個角色類,那麼我抽象類就可以正常工作。感謝提示:) – Niminim
@Niminim只問自己......是一個角色是一個階級還是一個角色有一個階級?看到你最初看到繼承的構圖通常會導致更好的設計。 – plalx