컨텍스트에서는 포켓몬의 라인을 따라 게임을 만들려고합니다. 당신은 괴물을 얻고, 훈련시키고 싸우게됩니다.많은 수의 클래스 중 하나를 만드는 우아한 방법
괴물의 각 종은 추상적 인 기본 클래스를 상속하는 클래스이므로 (고유 한 동작을 가질 수 있음) 게임 전체에 걸쳐 매우 많은 수의 다양한 종이있을 것으로 기대됩니다. 예 :
abstract class Monster {
int hp;
void attack();
//Etc.
}
public class FireBreathingDragon extends Monster {
static String species_name = "Fire Breathing Dragon";
//Blah
}
플레이어가 탐색 중일 때 영역에 국한하는 몬스터가 무작위로 나옵니다. 게임은 그 지역에 사는 종의 목록에서 무작위로 괴물을 만들어야합니다. 이제이 코드를 영역간에 재사용 할 수있게 만들고 코드의 다른 위치에서 동적으로 괴물을 만들 수있게 만들었습니다.이 영역에 가능성을 하드 코딩하고 싶지는 않습니다. 대신에 나는 수요에 주어진 종의 몬스터를 만드는 공장의 라인을 따라 뭔가, 뭔가를하고 싶은 생각 : 문제는 그 다음 "좋은"또는 "고급"에서 createMonster
을 구현하고
public class MonsterFactory {
Monster createMonster(
String species_name,
//Possibly other paramters
);
}
(잠재적으로) 수십 수백 가지의 몬스터 클래스가있을 때. 물론 매우 긴 if-else if-else
또는 switch
문을 사용할 수도 있지만 작성하고 확장하는 것은 끔찍한 일입니다. 이것을 할 수있는 좋은 방법이 있습니까? 몬스터를 추가 할 때 확장하기가 비교적 쉽다면 좋을 것입니다.
아니면 대신 완전히 다른 디자인을 사용해야합니까?
면책 조항 : 내 Java는 녹슨 것이지만 구문이 완벽하지 않을 수 있습니다. 죄송합니다.
왜 많은 수업이 있습니까? 종의 이름과 유형과 같은 필드가있는 몬스터 클래스를 하나 가질 수 있으며 다른 클래스를 가져야 할 수도 있습니다. – taronish4
내가 권하는 것은 Monster 클래스가 하나 밖에 없지만 동적으로 stat 파일을로드하는 것입니다 (설정 파일 등에서). 그런 다음 펑터 (하나의 메서드 만 가진 클래스)를 사용하여 attack() 작업을 재정의 할 수 있습니다. 예를 들어, WaterMonster는 WaterAttack이라고 불리는 AttackAction을 가지며, WaterMonster의'attack' 메소드는'AttackAction'에 위임합니다. –
모든 종류의 포켓몬을 파일 (CSV, XML, JSON, YAML, ... 등)에 저장하는 것을 고려 했습니까? 그런 다음 코드는이 파일을 한 번 읽으면 모든 유형을 초기화 한 다음 'createMonster'에서 동적으로 올바른 것을 만들 수 있습니다. – andersschuller