🧠 오늘의 핵심 정리

  • 본캠프 14일차: 배치고사 진행 (준비 0이었지만 8번 제외하고는 검색/AI 없이 풀었음)
  • 최종 보스(미노타우르스) 퀘스트 추가 + 전투 처치 시 진행도 연동
  • 퀘스트 보상 아이템에 RewardPrice(가격) 필드 추가 → 인벤/저장 연결 이슈도 같이 정리
  • 블랙잭 입력 UX 개선: Y/N 대소문자 허용, A(1/11) 입력 예외 처리, 골드 0일 때 무한 루프 방지
  • 팀원 PC에서만 뜨는 오류 발생 → 수정 후 정상화 (수명 깎이는 그 느낌…)

 

 

📝  배치고사

오늘은 배치고사! …근데 역시 준비는 1도 안 했다.

그냥 베이직 반 들어가서 평화롭게(?) 공부하면 되지~ 라는 마음으로 봤는데, 생각보다 문제 자체는 크게 어렵진 않았던 것 같다.

특히 8번 문제 빼고는 인터넷 검색/AI 없이 풀었다는 점에서… 나름 선방(?)했다고 생각하기로 했다.

 

 

👾  최종 보스 퀘스트 추가 + 전투 처치 연동

오늘은 “최종 몬스터가 추가됐다”는 소식을 듣고, 바로 최종 보스를 잡는 퀘스트를 추가했다.

퀘스트는 Quest 목록(정적 데이터)에 하나 더 추가하고, 전투에서 몬스터 처치 시 AcceptedQuests를 순회해서 카운트가 오르도록 연결했다.

Quest.cs - 최종 보스 퀘스트 추가

new Quest("최종 보스 해치우기",
    "이봐, 모험가!\n마을 근처에 **미노타우로스**가 나타났는데, 주민들이 무섭다고 난리야.\n" +
    "경비병들도 엄두도 못 내니, 자네가 가서 저 놈 좀 처치해주게!\n빨리 해치우고 와!",
    "'미노타우로스' 해치우기", 1,
    "차원 파괴자", 1, 99999999, 999, 999, 1000)

PlayerBattle.cs - 처치 시 퀘스트 진행도 증가

foreach (var acceptedQuests in PlayerRef.AcceptedQuests)
{
    if (acceptedQuests.Name == "최종 보스 해치우기"
        && acceptedQuests.Count < acceptedQuests.Total)
    {
        if (m.Name == "미노타우르스" && !m.IsCounted)
        {
            acceptedQuests.Count++;
        }
    }
}

이렇게 하면 보스 처치 시 퀘스트가 바로 완료되는 흐름이 만들어졌다. (보스는 1회 카운트면 충분!)

 

 

🎁  퀘스트 보상 아이템 가격(RewardPrice) 필드 추가

퀘스트 보상을 지급할 때, 아이템에 “가격” 정보도 필요해져서 RewardPrice를 Quest에 추가했다.

그리고 보상 지급 시 Item 생성자에도 가격을 넘겨주도록 수정!

Quest.cs - RewardPrice 추가 + 보상 지급 수정

public int RewardPrice { get; set; } // 보상 가격

// 보상 받기
player.Inventory.AddItem(
    new Item(quest.RewardName, quest.RewardCount, 0,
             quest.RewardAttack, quest.RewardDefense, quest.RewardPrice)
);

어제/오늘 겪은 저장/보상 오류도 결국 플레이어-인벤 연결 구조가 바뀌면서 생긴 문제였고, 최종적으로는 player.Inventory 기준으로 정리되면서 안정화됐다.

 

 

🃏  블랙잭 입력 예외 처리 + 골드 0 무한 루프 방지

블랙잭은 기능 자체는 돌아가는데, “사용자 입력” 쪽에서 사소한 함정들이 있었다.

  • Y/N 입력을 대소문자 모두 허용 (y/n도 인정)
  • A(1 또는 11 선택) 입력에서 숫자 아닌 입력/다른 값 들어오면 다시 입력
  • Gold가 0인데 블랙잭 선택하면 영원히 갇히던 문제 수정

BlackJack.cs - A 입력 TryParse로 방어

int num;
while (true)
{
    Console.Write("(A) 1과 11 중 선택하세요.(1 or 11): ");
    string a = Console.ReadLine();

    if (int.TryParse(a, out num) && (num == 1 || num == 11))
        break;

    Console.WriteLine("잘못된 입력입니다.");
}
card.playerSum += num;

BlackJack.cs - Y/N 대소문자 허용

string input = Console.ReadLine();
if (input.Equals("Y", StringComparison.OrdinalIgnoreCase)) { ... }
else if (input.Equals("N", StringComparison.OrdinalIgnoreCase)) { ... }

BlackJack.cs - 골드 0이면 게임 진입 막기

public bool Choose(Character player)
{
    ...
    if (num == 2)
    {
        if (player.Gold <= 0)
        {
            Console.Clear();
            Console.WriteLine($"Gold를 가져와라 플레이어 소지금 : {player.Gold}");
            continue;
        }
        Console.Clear();
        return true;
    }
}

입력 처리만 탄탄해져도 체감 완성도가 확 올라가는 느낌! (이게 은근 중요)

 

 

🧩  레벨업 퀘스트 진행도 처리 방식 수정

처음에는 Status.LevelUp() 안에서 “레벨업 시 카운트++”로 처리했는데, 나중에 생각해보니 레벨업이 여러 번/로드/중간 상태에서 꼬일 가능성이 있었다.

그래서 퀘스트 상세 화면을 볼 때 현재 레벨을 기반으로 진행도를 계산하도록 바꿨다.

Quest.cs - 레벨 기반 진행도 보정

if (quest.Name == "더욱 더 강해지기!")
{
    quest.Count = Math.Max(0, player.Level - 1);
}

이 방식의 장점은 세이브/로드레벨이 이미 올라간 상태에서도 진행도가 자연스럽게 맞춰진다는 것!

 

 

🧨  오늘의 이슈: 내 PC에선 안 뜨고 팀원 PC에서만 뜨는 오류

오늘 제일 스트레스 받았던 건 이거…

내 컴퓨터에선 정상인데 다른 팀원 컴퓨터에서만 오류가 뜨는 상황이 생겼다.

원인을 바로 특정하기가 너무 어렵고, “왜 나한테는 안 뜨지?” 상태라 진짜 멘탈이 갈렸다…

그래도 코드 조금 손보니까 정상화돼서 다행. 근데 이럴 때마다 수명이 깎이는 기분이다. 😇

 

 

📌 오늘의 회고

 

배치고사는 준비를 안 해서 긴장도 안 했는데(?) 막상 풀어보니 생각보다 할 만했다.

프로젝트가 슬슬 막바지로 가는 게 느껴져서, 와이어프레임을 최종으로 정리했다.

그리고 인벤토리 연결 구조가 바뀌면서 저장/보상 기능이 한 번씩 터졌는데, 결국 원인을 잡고 해결하니까 기분은 좋았다. (역시 해결이 주는 쾌감…)

다만 팀원 PC에서만 터지는 오류는… 진짜… 매번… 수명 깎인다!!!

 

 

🔜 내일 할 일

  • 퀘스트 완료/보상/저장 흐름 전체 테스트 (팀원 PC 포함)
  • 와이어프레임 기준으로 UI/메뉴 출력 정리 (막바지 마무리)