🧠 오늘의 핵심 정리

  • TRPG 프로젝트에 퀘스트 시스템(WIP) 추가
  • Quest 목록(정적 데이터) + 캐릭터의 수락 퀘스트(런타임 데이터)로 분리
  • 퀘스트 UI(목록/상세/수락/완료/보상) 흐름을 콘솔 메뉴로 구현
  • 장비 장착 시 퀘스트 진행도 증가, 보상으로 아이템/골드 지급까지 연결

 

 

🧩  Quest.cs 작성 (WIP)

오늘은 코딩할 게 좀 많았습니다. 역시 아무 일도 안 하는 것보단 뭐라도 코딩하는 게 기분이 더 좋다는 걸 다시 느낌… (진짜루)

Quest.cs를 새로 만들고, 퀘스트 기본 구조 + 콘솔 메뉴까지 만들었습니다. 우선 퀘스트는 정적 목록(Quest.Quests)에 두고, 플레이어는 수락한 퀘스트를 따로 들고 있게 구성했습니다.

퀘스트 데이터 구조 + 정적 퀘스트 목록

public class Quest
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string MiniDescription { get; set; }

    public int Count { get; set; }      // 진행도
    public int Total { get; set; }      // 목표치

    public string RewardName { get; set; }
    public int RewardCount { get; set; }
    public int RewardGold { get; set; }
    public int RewardAttack { get; set; }
    public int RewardDefense { get; set; }

    public bool Accepted { get; set; }     // 수락 여부
    public bool IsCompleted { get; set; }  // 완료 여부

    public Quest() { }

    public Quest(string name, string desc, string miniDesc, int total,
                 string rewardName, int rewardCount, int rewardGold,
                 int rewardAttack, int rewardDefense)
    {
        Name = name;
        Description = desc;
        MiniDescription = miniDesc;
        Count = 0;
        Total = total;
        RewardName = rewardName;
        RewardCount = rewardCount;
        RewardGold = rewardGold;
        RewardAttack = rewardAttack;
        RewardDefense = rewardDefense;
        IsCompleted = false;
        Accepted = false;
    }

    public static Quest[] Quests = new Quest[]
    {
        new Quest("마을을 위협하는 미니언 처치",
            "이봐! 마을 근처에 미니언들이 너무 많아졌다고 생각하지 않나?\n" +
            "마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n" +
            "모험가인 자네가 좀 처치해주게!",
            "미니언 5마리 처치", 5, "쓸만한 방패", 1, 5, 5, 5),

        new Quest("장비를 장착해보자",
            "인벤토리에서 장비를 장착해보자!!",
            "장비 장착", 1, "날카로운 단검", 1, 3, 4, 4),

        new Quest("더욱 더 강해지기!",
            "레벨업을 하시오.",
            "레벨 업", 1, "가죽 장갑", 1, 5, 3, 3)
    };
}

이렇게 해두면 퀘스트 “설계도”는 한 곳에서 관리되고, 플레이어는 필요한 것만 수락해서 진행하게 만들 수 있어서 구조가 깔끔해지는 느낌이었습니다.

 

 

🧭  퀘스트 메뉴 흐름 연결 (Intro.cs)

로비 메뉴에 ④ 퀘스트를 추가해서 퀘스트 화면으로 들어갈 수 있게 연결했습니다.

// Intro.cs (StartScene 메뉴 일부)
Console.WriteLine("                       [④   퀘 스 트    ]");

// ...
case "4":
    Console.WriteLine("퀘스트를 선택했습니다.");
    System.Threading.Thread.Sleep(1000);
    Console.Clear();
    quest.ShowQuest(player, inventoryItem);
    break;

 

 

📌  수락한 퀘스트 관리 (Status.cs)

Character에 수락한 퀘스트 리스트를 만들고, 수락 시 AddQuest로 넣도록 했습니다.

public class Character
{
    public List<Quest> AcceptedQuests { get; set; } = new List<Quest>(); // 수락한 퀘스트들

    public void AddQuest(Quest quest) // 퀘스트 추가
    {
        if (!AcceptedQuests.Contains(quest))
        {
            AcceptedQuests.Add(quest);
        }
    }

    public void AddGold(int gold)
    {
        Gold += gold;
    }
}

“수락한 퀘스트만” 따로 보여주는 메뉴도 추가해서, 진행 중/완료한 퀘스트를 구분해서 볼 수 있게 만들었습니다.

퀘스트 목록 UI에 A/B 메뉴 추가

Console.WriteLine("\n0. 돌아가기");
Console.WriteLine("A. 수락한 퀘스트");
Console.WriteLine("B. 완료한 퀘스트");

if (input.Equals("A", StringComparison.OrdinalIgnoreCase))
{
    ShowAcceptedQuests(player);
}
else if (input.Equals("B", StringComparison.OrdinalIgnoreCase))
{
    ShowCompletedQuests(player);
}

 

 

⚔️  “장비 장착” 퀘스트 진행도 연동

전투 쪽은 팀원이 많이 만지고 있어서 제가 끼기 애매했는데, 대신 제가 할 수 있는 부분인 장비 장착 이벤트에 퀘스트 진행도를 연결했습니다. (전투 게임이니까 battle 쪽 손이 많이 가는 건 맞는 듯… ㅋㅋ)

public void EquipItem(Item item)
{
    if (!EquippedItems.Contains(item))
    {
        foreach (var acceptedQuest in AcceptedQuests)
        {
            if (acceptedQuest.Name == "장비를 장착해보자"
                && acceptedQuest.Count < acceptedQuest.Total)
            {
                acceptedQuest.Count++;
            }
        }

        EquippedItems.Add(item);
        item.IsEquipped = true;
        Console.WriteLine($"{item.Name} 장착!");
    }
}

이렇게 해서 “장비 장착” 퀘스트는 최소한 진행도 증가 → 완료 흐름이 돌아가게 됐습니다.

 

 

🎁  보상 지급 연결 (아이템 + 골드)

보상은 처음에 아이템만 넣었다가… 골드 보상을 깜빡해서 다시 추가했습니다 (ㅎㅎ…). Inventory에 AddItem도 추가해서 퀘스트 보상 아이템을 넣을 수 있게 했고, 골드는 player.AddGold로 지급하도록 연결했습니다.

// Inventory.cs
public void AddItem(Item item)
{
    items.Add(item);
}
// Quest.cs - 보상 받기 부분
inventory.AddItem(new Item(
    quest.RewardName, quest.RewardCount, 0,
    quest.RewardAttack, quest.RewardDefense));

player.AddGold(quest.RewardGold);
quest.IsCompleted = true;

이제 최소한 “완료 → 보상 받기 → 인벤/골드 반영”까지는 이어졌고, 다음은 전투/상태(Status.cs, Battle.cs) 쪽 진행도(미니언 처치, 레벨업 등)를 자연스럽게 연결해야 합니다.

 

 

📌 오늘의 회고

 

오늘은 퀘스트 만들면서 커밋을 자잘하게 많이 했는데, “너무 사소한 거에 커밋하는 거 안 좋은 습관인가?” 싶었다가도… 연습이니까!! 괜찮아!!! 라고 결론 냈습니다.

그리고 팀플은 역시… 다른 사람이 만지고 있는 cs를 내가 건들기가 애매해서 오늘 목표한 만큼 다 못 만들었습니다. (battle 쪽은 특히 손이 많이 가서 제가 낄 틈이 없네… 하기 전투 게임이니까 ㅋㅋㅋ)

그래도 퀘스트 UI/수락/완료/보상 흐름은 뼈대가 잡혀서 만족! 다음에는 진행도 트리거를 더 늘려서 “미니언 처치 / 레벨업”도 제대로 완성해보고 싶습니다.

 

 

🔜 내일 할 일

  • 퀘스트 진행도 트리거 추가 (전투 처치 / 레벨업 이벤트 연동)
  • 저장 기능(퀘스트 수락/완료 상태 포함) 방향 고민
  • 오늘 만든 퀘스트 흐름 WIP 마무리