【问题标题】:Writing a game: Dynamic attack logic in classes编写游戏:类中的动态攻击逻辑
【发布时间】: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


【解决方案1】:

您需要编写一个包含计算签名的基类,并在派生类上根据它们的专业实现它们。

它是一个实体,你可以在“Strategy Design Pattern”的标题下找到更多关于它的信息

【讨论】:

  • 这似乎很有用,谢谢。 @RobertMoskal 建议我可以使用数据来生成算法。如果我可以这样做,它将允许我从表中动态创建攻击类的实例,而不是对每个攻击进行硬编码(就像策略模式一样)。我的推论是对的还是我误解了策略模式?
猜你喜欢
  • 1970-01-01
  • 2020-02-03
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多