나는 java를 사용하여 전쟁 게임을하고있다. 이 wargame에는 다른 전투 유닛이 있습니다. 유닛은 모두 '인간', '드워프', '엘프'등의 고유 한 속성을 가진 유닛입니다. 이러한 속성을 수용하기 위해 나는 추상적 인 'Unit'클래스를 확장 한 '인간', '드워프'및 '엘프'클래스를 현재 보유하고 있습니다.wargame 상호 작용을위한 디자인 패턴
이제 피해 도표를 프로그램하고 싶습니다. 예를 들어 인간이 왜소를 공격하면 56 데미지를 입 힙니다. 드워프가 엘프를 공격하면 27의 피해를 입 힙니다. 단위 간의 각 상호 작용은 고유하며 숫자를 제공합니다.
새로운 유닛을 추가하고 손상 차트를 업데이트하여 서로 다른 유닛과 상호 작용할 수 있도록 디자인 패턴을 찾고 있습니다. 또한 유닛을 쉽게 제거해야합니다.
각 유닛에 고유 한 ID를 부여하고이 유닛과 같은 메소드를 넣는 방법에 대해 생각했습니다.
public int getDamage(Unit defender) {
switch(defender.getID() {
case 0: return 27;
case 1: return 50;
....
}
}
그러나 추가하거나 '단위'를 구현하는 각 클래스에서 switch 문을 변경해야하기 때문에 단위 이런 식으로 제거하기가 매우 거추장스러운 것 같다. 그것은 또한 아주 읽기 쉽지 않다. switch 문을 별도의 'Damage Chart'클래스에 넣는 방법에 대해서도 생각했습니다. 그러나 이것은 공격자를위한 switch 문을 필요로하며 중첩 된 switch 문을 생성합니다 (추한 것입니다).
해결 방법이 있습니까? 어쩌면 이런 종류의 문제에 대한 디자인 패턴이 이미 존재할 수 있습니까?
또한 방문자 패턴을 제안합니다. 제네릭과 결합해서, 그것은 꽤 잘해야합니다. – Korashen
이것은 공격자와 수비수를 다른 모드로 방문하는 AttackVisitor를 의미합니다. 공격자와 방어자의 조합마다 적어도 하나의 방법을 쓰게됩니다. 그러한 조합은 (단위의 수, 제곱) 있습니다. 이것은 나에게 매우 다루기 힘든 것으로 들리지 않습니다. – Svante
결국 n^2 숫자를 입력해야합니다. n^2 방법을 만드는 것은 그다지 다르지 않습니다. 또한 id-numbers (나는 싫어한다.)를 사용하지 못하게하고 코드를 읽을 수있게 해준다. 그러나 나는 나의 단위가 지금 양쪽 다 방문자이고 beiing하고있는 것을 보는 것은 약간 이상하게 보인다. 그러나 이것이 최선의 해결책이라고 생각합니다! Thnx! – kerel123