您可能应该在这里进行数据驱动的设计。
制作一个通用的Attack类,其中包含您要使用的参数-基本损坏,影响损坏的统计数据,一组潜在的状态影响...类似这样的东西:
public enum AttackStat
{
Strength,
Agility,
Intellect
// etc.
}
public class Attack
{
private int baseDamage;
private AttackStat stat;
private double damageMultiplier;
// ...and so on
public void Attack(Character attacker, Character defender)
{
defender.DoDamage(baseDamage + attacker.GetStatValue(stat) * damageMultiplier);
}
}
// Put a method on Character to fetch the appropriate value given an AttackStat:
public int GetStatValue(AttackStat s)
{
switch(s)
{
case AttackStat.Strength:
return strength;
case AttackStat.Agility:
return agility;
// etc.
}
}
然后,将攻击置于文件(例如XML文件)中,并从那里加载数据:
<Attacks>
<Attack name="Sword Slash" damage="10" stat="Strength" multiplier="1" />
<!-- More attacks here -->
</Attacks>
您甚至可以扩展它以从多个统计数据(例如,火球)中提取值,该数据是根据智力统计数据和火统计数据计算得出的:
<Attack name="Fireball" damage="20">
<StatModifier stat="Intellect" multiplier="0.4" />
<StatModifier stat="Fire" multiplier="0.8" />
</Attack>
如果您不希望对所有事物使用相同的基本伤害公式(例如,以不同于物理伤害的方式计算魔法伤害),请为所需的每个公式创建Attack的子类并覆盖Attack,然后在XML文件中指定所需的类型。