내일배움캠프 TIL - 2주차 과제 트러블 슈팅 (Troubleshooting)

Jaden Lee·2025년 3월 17일
0

내일배움캠프

목록 보기
8/15
post-thumbnail

📌 TIL: Dart로 턴제 배틀 시스템 구현하기

오늘은 Dart를 사용하여 턴제 배틀 시스템을 구현하는 방법을 배웠다.
특히 객체지향 프로그래밍(OOP) 개념을 활용하여 캐릭터와 몬스터 간의 전투를 처리하는 방식을 익혔다.


🏗️ 구현 개요

이전까지 만든 CharacterMonster 클래스를 활용하여, 두 객체가 서로 공격하는 배틀 시스템을 만들었다.
전투(Battle)는 start() 메서드에서 진행되며, 플레이어와 몬스터가 번갈아 가며 행동을 수행한다.


🔑 주요 기능 정리

  1. 플레이어 선택지 제공

    • 공격(1), 방어(2), 아이템 사용(3) 중 선택할 수 있다.
    • 아이템은 전투 중 한 번만 사용할 수 있다.
  2. 몬스터의 반격

    • 플레이어가 행동을 마치면 몬스터가 반격한다.
  3. 턴 수에 따른 방어력 증가

    • 3턴마다 몬스터의 방어력이 증가하여, 전투가 길어질수록 난이도가 올라간다.
  4. 전투 결과 출력

    • 승리하면 🎉 몬스터를 물리쳤습니다!
    • 패배하면 💀 플레이어가 패배했습니다.

📝 코드 분석

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;
    }
전투 종료 후 결과 출력
플레이어가 이기면 "🎉 승리"
지면 "💀 패배"

🧐 배운 점 & 개선할 점

✅ 배운 점

  • 턴제 전투 시스템의 기본 구조를 이해했다.
  • 객체지향 프로그래밍(OOP) 개념을 활용하여 Character 와 Monster 클래스를 사용했다.
  • 전투 흐름을 관리하는 Battle 클래스를 통해 게임 로직을 구성하는 방법을 배웠다.

💡 개선할 점

  • 몬스터가 특수 스킬을 사용할 수 있도록 추가하면 더 흥미로운 전투가 될 것 같다.
  • 경험치 및 레벨 시스템을 도입하여 플레이어 성장 요소를 추가할 수 있다.
  • 무기 및 방어구 시스템을 구현하면 전략적인 선택이 가능해질 것이다.

📌 다음 목표

  • 몬스터에게 특수 스킬 추가
  • 경험치 및 레벨 시스템 추가
  • 무기 및 방어구 시스템 추가
  • 도전 모드 (보스전) 구현
  • 멀티 엔딩 시스템 도입
  • 배운 내용을 바탕으로 더 확장된 시스템을 만들어보자! 🚀

0개의 댓글