카테고리 없음

C#으로 TRPG 개발: 퀘스트창 구현 하기 2

강자이 2024. 5. 3. 17:36

장비 장착 퀘스트 구현하기

 

 

위의 퀘스트 중 2번, '2. 장비를 장착해보자' 퀘스트를 구현했습니다.

 

 


이전 방식의 문제점

이전에는 각 퀘스트를 표현하기 위해 메서드를 별도로 만들어야 했습니다.

이로 인해 중복되는 코드가 많아지고 유지보수가 어려웠습니다. 또한, 퀘스트의 추가나 수정이 필요할 때마다 메서드를 새로 만들어야 했기 때문에 번거로웠습니다.

  public void ShowMinionQuest(QuestManager questManager)
        {
            Quest minionQuest = new Quest("마을을 위협하는 미니언 처치",
                                          "이봐! 마을 근처에 미니언들이 너무 많아졌다고 생각하지 않나?\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n모험가인 자네가 좀 처치해주게!",
                                          1,
                                          new string[] { "쓸만한 방패 x 1", "5G" });
            Console.WriteLine($"Quest!!\n{minionQuest.Description}\n\n- 미니언 {minionQuest.TargetCount}마리 처치 ({minionQuest.CurrentCount}/{minionQuest.TargetCount})\n");
            Console.WriteLine("- 보상 -");
            foreach (string reward in minionQuest.Rewards)
            {
                Console.WriteLine(reward);
            }
            Console.WriteLine("\n1. 수락");
            Console.WriteLine("2. 거절");
            Console.WriteLine("\n--------------------");
            string input = Console.ReadLine();
            questManager.AcceptOrRejectQuest(input); 
        }

 

 


 

새로운 접근 방식

 

새로운 접근 방식은 퀘스트를 하나의 리스트로 관리하여 코드를 훨씬 더 효율적으로 만들었습니다.

각 퀘스트는 다음과 같은 속성을 가지고 있습니다.

  • 이름
  • 설명
  • 목표 개수
  • 퀘스트 수락 여부
  • 퀘스트 완료 여부
  • 보상 목록

 

    public class QuestManager
    {

        public static List<Quest> quests = new List<Quest>
        {
            //quests.Add(new Quest("name", "설명", 0, false, false, rewards1배열));
            //string name, string description, int targetCount, bool IsAccepted, bool IsCompleted, string[] rewards
            new Quest ("[마을을 위협하는 미니언 처치]","이봐! 마을 근처에 미니언들이 너무 많아졌다고 생각하지 않나?\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n모험가인 자네가 좀 처치해주게!",5,false,false,new string[] { "쓸만한 방패 x 1", "5G" }),
            new Quest ("[장비를 장착해보자!]","이봐! 마을 근처에 미니언들이 너무 많아졌다고 생각하지 않나?\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n모험가인 자네가 좀 처치해주게!",1,false,false,new string[] { "쓸만한 방패 x 1", "5G" }),
            new Quest ("[더욱 더 강해지기!]","이봐! 마을 근처에 미니언들이 너무 많아졌다고 생각하지 않나?\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n모험가인 자네가 좀 처치해주게!",1,false,false, new string[] { "쓸만한 방패 x 1", "5G" })
            
        };

 

퀘스트 정보를 한 곳에 모아둠으로써 퀘스트를 추가하거나 수정할 때마다 여러 곳을 수정할 필요가 없어졌습니다.

또한, QuestManager를 통해 퀘스트 정보를 쉽게 접근하고 조작할 수 있게 되었습니다.