ここでは、おそらくデータ駆動型の設計に行く必要があります。
使用したいパラメーターを含む一般的な攻撃クラスを作成します-基本ダメージ、ダメージに影響する統計、潜在的なステータス効果のセットなど...
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>
これを拡張して、複数の統計、たとえば、ダメージがIntellectとFireの両方の統計から計算されるFireballから値を引き出すこともできます。
<Attack name="Fireball" damage="20">
<StatModifier stat="Intellect" multiplier="0.4" />
<StatModifier stat="Fire" multiplier="0.8" />
</Attack>
すべてに同じ基本的なダメージ式を使用したくない場合(物理的ダメージとは異なる魔法のダメージを計算するなど)、必要な各式に対して攻撃のサブクラスを作成し、攻撃をオーバーライドし、XMLファイルに必要なタイプを指定します。