【发布时间】:2016-08-10 23:51:42
【问题描述】:
我正在用 C# 编写一个 RPG,我的角色类初始化得很好,但我正在努力处理攻击类。
每次攻击都有其独特的伤害计算公式,该公式基于多个统计数据和最终的装饰器。
有没有办法动态创建/附加这些损害公式和装饰器,或者我应该为每个攻击创建一个独特的类来扩展通用攻击类?
这是我所追求的一些伪代码:
public class Attack
{
public string Name {get; set;}
List<Decorators> DamageCalc;
public Attack(string[] data, List<Decorators> decorators)
{
Name = data[DataList.Name]; //I'm using constants to keep my indexes readable
DamageCalc = data[DataList.Damage]; //i.e. strength * 10 + agility
Decorators = decorators
ApplyDecorators(Decorators)
}
public double DamageCalculation(Character attacker)
{
return DamageCalc; //attacker.Strength * 10 + attacker.Agility
}
...
}
我对添加新功能和行为的灵活性特别感兴趣。
非常感谢您的意见!
编辑 1
在我使用 JSON 的地方,是否有任何简单的方法可以将 JSON 字段与我的Character 类的 stat 变量相关联,或者我是否需要编写自定义代码来进行互操作?
我想不出一种整洁的方式来使用 JSON 字段或任何可以从我的 Character 类动态收集信息的字段。
编辑 2 理想情况下,这将允许我通过从 JSON 文件、字符串、XML 文件或数据库表中获取数据,将我的所有攻击动态创建为单个攻击类的实例。
我更改了DamageCalculation 方法的代码示例。
关闭 我选择的答案确实为我的特定问题提供了解决方案。看来我真的必须编写代码来解析公式并生成我所设想的动态工具。因此,我会看看我是否可以从设计的角度解决这个特殊问题。
【问题讨论】:
-
在构造函数中使用字符串数组传入设置就可以了。这样,您可以轻松地从外部数据源驱动设置。考虑使用更结构化的格式,例如 JSON。
-
@Robert 谢谢你。 JSON 是我正在努力的东西(我对 C# 还是很陌生)。是否有任何简单的方法可以将 JSON 字段与我的字符类的 stat 变量相关联,或者我是否需要编写自定义代码来进行互操作?
标签: c# design-patterns decorator