我想到了我的第一个java项目(面向对象的)的想法。这个项目是一个非常基本的角色扮演游戏(没有GUI,它是非常基本的),所以我有一些面向对象的问题。
玩家可以选择一个角色类(你知道,拳击手,巫师等等)。将来他可能会选择几个角色,这样他就可以开个派对了)。在角色创建之后,他可以对抗其他敌人(由程序控制)。
建议实现:我考虑创建一个抽象类(包括等级、装甲类、能力(比如力量、灵巧、智慧等))。还有一些像进攻和防守之类的方法。其他特定类将扩展字符,如下所示:
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)问题:
请记住,它应该是基本的,但它应该为未来的变化和补充计划。看起来应该是:
你想怎么攻击?
3.
你想用哪个咒语?
1
你用火球击中敌人,造成20点伤害。
很模糊,但你明白.
非常感谢!!
发布于 2015-10-20 12:59:06
我建议不要让Character成为(例如) Fighter的抽象基类。作为一名战士只是性格的一种属性。我只是告诉你,他可以挥舞剑,戴上车牌--比如邮件。在一些游戏中,假设一个Warrior角色永远是一个战士。然后,当需求发生变化,以便字符可以将类更改为,比方说,Mage时,就会出现一个完整的数据迁移问题,而不仅仅是属性的更改。K
尽量保持你的继承树浅薄。可以时使用聚合和组合,而不是继承。
发布于 2015-10-20 12:44:15
通常,类B应该是A的子类,只有在它们之间存在一个is --一个关系--也就是说,如果说B的任何实例也是A的一个实例是有意义的话。通过应用这一点,您可以看到字符类是Character子类的唯一可行选择:Warrior是Character,但Weapon不是Character。相反,在其他类和Character之间有一个Character --一种关系:Character有一个Weapon。在这种情况下,您应该使用组合:Character类可以有一个类型为Weapon的字段(或者更有可能是List<Weapon>类型的字段,这样您就可以拥有多个武器)。
但是,即使您可以创建一个类层次结构,也不确定是否应该这样做。如果字符类之间的差异完全可以实现为统计数据的差异(这可能只是类中的字段)或一些简单的能力差异,那么您可能只需要Character类。另一方面,如果行为差异很大,并且最终会有一堆if语句来为不同情况下的不同字符类选择适当的行为,那么引入子类可能是明智的。但是,正如@plalx和@B.Dalton所指出的,通常可以使用组合,将行为差异提取到抽象的CharacterAbilities类及其子类中。
发布于 2015-10-20 12:50:27
https://stackoverflow.com/questions/33236836
复制相似问题