Java RPG动态技能和设计模式

时间:2013-11-27 09:58:55

标签: java design-patterns

我正在为我的学习开展RPG游戏,我们需要使用设计模式,我正在尝试编写动态角色技能。例如,我会有一些物品,当装备时,添加角色之前没有的新技能(治愈......)。

为此,我想使用装饰器模式,但是使用这个模式,我们不能向类中添加方法或属性,只需修改那些已存在的模式,对吧?

那么有一种动态的方法吗?

1 个答案:

答案 0 :(得分:1)

那里有很多模式;你的老师要求特定模式或模式组吗?而且,模式有时候是有意义的。只有当它们有助于解决问题时才使用它们,而不是因为它们很酷。

在这种情况下,可以使用装饰器 。在编写时,它们不应该添加外部方法或属性。因此,即使是裸体角色,您也需要getHealingPower()getArmorValue()等等;并且每个包装的装饰器都会修改它关注的事物的返回值:HealingBookDecorator将返回wrappedObject.getHealingPower() + 15。然而,我发现这个场景非常难看,因为角色无法移除治疗书以将其留在地板上,或者拿起更好的书。装饰物通常不知道他们的装饰者。另外,如果你的角色被命名为bob,那么使用StripedShirtDecorator(RedScarfDecorator(PolkaDotTrousersDecorator(bob)))给他打扮是很奇怪的。

如果我必须实施此操作,则每个Item都会有String description并包含Map<Stat, Integer> modifiers(其中Statenum有效统计信息,如治疗,护甲值,最大HP等等)。 Character会有ArrayList<Item> inventoryMap<Stat, Integer> baseStats他或她的基本统计信息,而另一个Map<Stat, Integer> currentStats会包含合并baseStats和{{modifiers的结果1}}每个Item在角色的广告资源中,每次角色升级或添加或删除其广告资源中的内容时都需要更新。

要检查名为Stat.MusicProficiency的{​​{1}}中Character的级别,您需要编写lisaSimpson。这样做的好处是可以很容易地添加新类型的项目(它们将是对象实例,而不是类),并且库存管理将大大简化。