아마도 데이터 중심 디자인을 사용해야 할 것입니다.
작업 할 매개 변수 (기본 피해, 통계가 피해에 영향을 미치는 통계, 일련의 잠재적 인 상태 효과 등)를 포함하는 일반 공격 클래스를 만듭니다.
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 파일에서 원하는 유형을 지정하십시오.