카테고리 없음
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를 통해 퀘스트 정보를 쉽게 접근하고 조작할 수 있게 되었습니다.