오늘은 Dart를 사용하여 턴제 배틀 시스템을 구현하는 방법을 배웠다.
특히 객체지향 프로그래밍(OOP) 개념을 활용하여 캐릭터와 몬스터 간의 전투를 처리하는 방식을 익혔다.
이전까지 만든 Character
와 Monster
클래스를 활용하여, 두 객체가 서로 공격하는 배틀 시스템을 만들었다.
전투(Battle)는 start()
메서드에서 진행되며, 플레이어와 몬스터가 번갈아 가며 행동을 수행한다.
플레이어 선택지 제공
몬스터의 반격
턴 수에 따른 방어력 증가
전투 결과 출력
🎉 몬스터를 물리쳤습니다!
💀 플레이어가 패배했습니다.
class Battle {
Character character;
Monster monster;
int turnCounter = 0; // 몬스터 방어력 증가를 위한 카운트 변수
bool itemUsed = false; // 아이템 사용 여부
Battle(this.character, this.monster);
bool start() {
while (character.health > 0 && monster.health > 0) {
character.showStatus();
monster.showStatus();
UIHelper.printTitle("행동을 선택하세요: 공격(1), 방어(2), 아이템 사용(3)");
String choice = InputHandler.getUserInput();
Battle 클래스는 전투를 관리하는 역할을 한다.
turnCounter 변수를 사용하여 3턴마다 몬스터의 방어력을 증가시킨다.
itemUsed 변수를 활용해 아이템을 한 번만 사용할 수 있도록 제한했다.
if (choice == "1") {
character.attackMonster(monster);
} else if (choice == "2") {
character.defend();
} else if (choice == "3" && !itemUsed) {
character.useItem();
itemUsed = true;
} else {
UIHelper.printWarning("❌ 잘못된 입력입니다. 다시 선택하세요.");
continue;
}
플레이어가 선택한 행동에 따라 attackMonster(), defend(), useItem() 메서드를 호출한다.
아이템은 전투 중 한 번만 사용 가능하도록 제한했다.
if (monster.health > 0) {
monster.attackCharacter(character);
}
turnCounter++;
if (turnCounter % 3 == 0) {
monster.increaseDefense();
}
몬스터의 체력이 0 이상일 경우, 반격을 한다.
3턴마다 increaseDefense()를 호출하여 몬스터의 방어력을 증가시킨다.
if (character.health > 0) {
UIHelper.printSuccess("🎉 ${monster.name}을(를) 물리쳤습니다!");
return true;
} else {
UIHelper.printDanger("💀 ${character.name}이(가) 패배했습니다.");
return false;
}
전투 종료 후 결과 출력
플레이어가 이기면 "🎉 승리"
지면 "💀 패배"