gpt4 book ai didi

Java RPG 动态技巧与设计模式

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:03 27 4
gpt4 key购买 nike

我正在为我的研究开发一款角色扮演游戏,我们需要使用设计模式,并且我正在尝试编写动态角色技能。例如,我会有一些元素,在装备后,会添加角色以前没有的新技能(治疗...)。

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

那么有没有一种动态的方式来做到这一点?

最佳答案

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

在这种情况下,可以使用装饰器。正如您所写,它们不应该添加外部方法或属性。所以你需要 getHealingPower() , getArmorValue()甚至对于裸体角色也是如此;每个包装的装饰器都会修改它关心的事物的返回值:a HealingBookDecorator将返回wrappedObject.getHealingPower() + 15 。然而,我发现它们在这种情况下非常丑陋,因为角色无法移除治疗书并将其留在地板上,或者拿起一本更好的书。被装饰的对象通常不知道它们的装饰者。另外,如果你的角色名为bob ,用StripedShirtDecorator(RedScarfDecorator(PolkaDotTrousersDecorator(bob)))给他穿衣服会很奇怪。 .

如果我必须实现这个,每个 Item会有 String description并包含 Map<Stat, Integer> modifiers (其中 Stat 是有效统计数据的 enum,例如治疗、护甲值、最大生命值等)。一个Character会有 ArrayList<Item> inventory ,一个Map<Stat, Integer> baseStats他或她的基本统计数据,以及另一个Map<Stat, Integer> currentStats其中将包含合并的结果 baseStatsmodifiers每个Item在角色的库存中,并且每次角色升级或从其库存中添加或删除某些东西时都需要更新。

检查 Stat.MusicProficiency 的级别在 CharacterlisaSimpson ,然后你可以写 lisaSimpson.getStat(Stat.MusicProficiency); 。这样做的优点是可以很容易地添加新类型的项目(它们将是对象实例,而不是类),并且库存管理将大大简化。

关于Java RPG 动态技巧与设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20239179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com