본문 바로가기
제출용/TIL

내일배움캠프 16일차 TIL + 퀘스트 구현 완.

by 유린테 2024. 5. 7.

휴~ 드디어 퀘스트 구현을 끝냈다!!!

 

퀘스트 1. 과제발생기 부수기

private static void AttackComputer(Player player)
{
    // 적 객체를 생성하여 컴퓨터를 대체
    Computer computer = new Computer("컴퓨터", 100); // 이름은 "컴퓨터", 체력은 100으로 설정


    while (computer.Health > 0)
    {
        Console.Clear();    
        Console.WriteLine();
        Console.WriteLine("         .~;!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.        ");
        Console.WriteLine("         .=$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,        ");
        Console.WriteLine("         .$!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!$-        ");
        Console.WriteLine("         .$!                                   !$-        ");
        Console.WriteLine("         .$!          오늘은                   !$-        ");
        Console.WriteLine("         .$!                                   !$-        ");
        Console.WriteLine("         .$!          어떤과제를               !$-        ");
        Console.WriteLine("         .$!                                   !$-        ");
        Console.WriteLine("         .$!          내볼까나...  ^^          !$-        ");
        Console.WriteLine("         .$!                                   !$-        ");
        Console.WriteLine("         .$!                                   !$-        ");
        Console.WriteLine("         .$*:::::::::::::::::::::::::::::::::::*$-        ");
        Console.WriteLine("         .=======================================-        ");
        Console.WriteLine("         .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.        ");
        Console.WriteLine("         .=$$$$$$$$$$$$$$$$$=;;=$$$$$$$$$$$$$$$$$$,       ");
        Console.WriteLine("                         ,$$$$$$$,                        ");
        Console.WriteLine("                  .!======$$$$$$$======*~                 ");
        Console.WriteLine();
        Console.WriteLine($"컴퓨터 체력: {computer.Health}/100");
        Console.WriteLine();
        Console.WriteLine("1. 컴퓨터를 공격하기");
        Console.WriteLine("0. 마을로 돌아가기");
        Console.WriteLine();

이런 컴퓨터를 계속 때려주면

 

if (computer.Health <= 0)
{
    Console.Clear();

    Console.WriteLine();
    Console.WriteLine("         .~;!!;;;;   ;;;;;;;;;;            ;;;;;;.        ");
    Console.WriteLine("         .      $$$$$$$$           $$$$$$$$$$$$$$,        ");
    Console.WriteLine("         .$!,,,,,,,,,,,,,,,,      ,,,,,,,,,,,,,!$-        ");
    Console.WriteLine("         .$!                                   !$-        ");
    Console.WriteLine("    .$!            오늘                                   ");
    Console.WriteLine("         .$!                                   !$-        ");
    Console.WriteLine("         .$!                과제               !$-        ");
    Console.WriteLine("         .$!                                   !$-        ");
    Console.WriteLine("         .$!          없                                  ");
    Console.WriteLine("        $!                            음       !$-        ");
    Console.WriteLine("         .$!                                  !$-         ");
    Console.WriteLine("         .$*:::::::::         :::::::::::::::::*$-        ");
    Console.WriteLine("         .===================      ==============-        ");
    Console.WriteLine("         .~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.              ");
    Console.WriteLine("              $$$$$$$$$$  =;;=$$$$$$$$$   $$$$,           ");
    Console.WriteLine("                         ,$$                              ");
    Console.WriteLine("      =$$         .!======$$$$$$$======*~                 ");
    Console.WriteLine();

    player.Gold += 500; // 보상으로 500G 지급

    Console.WriteLine("컴퓨터를 파괴했습니다!");
    Console.WriteLine();
    Console.WriteLine("보상으로 500G 를 드립니다");
    Console.WriteLine("아무 키를 눌러 마을로 돌아가세요");
    Console.ReadKey();
    
    break;
}
break;

이렇게 부숴진다!!!!

 

   int choice = ConsoleUtility.PromptMenuChoice(0, 1);

   switch (choice)
   {
       case 0:
           GameManager gameManager = new GameManager();
           gameManager.MainMenu(player);
           return;

       case 1:
           // 플레이어의 공격력으로 컴퓨터를 공격
           computer.Health -= player.Attack;

1번을 누르면 컴퓨터를 공격하는데, 플레이어가 가진 공격력으로 공격을 하게끔 만들었다.

그리고 컴퓨터를 부수기 위해서는 컴퓨터 개체를 불러와서 했어야 했는데, 사실 왜인지 잘 모르겠다.

 

그리고 반복해서 컴퓨터를 때리기 위해 컴퓨터 체력 > 0 일 때 계속 공격을 실시하게 했고,

컴퓨터 체력이 0보다 작아지면 isDead 죽음처리가 된다.

 

보상으로 500G를 주게끔 했는데, 골드를 추가하는건 정말 간단했다.

player.Gold += 500; 하나만 넣어주면 끝이었음.

하지만 아이템을 넣어주는건 상당히 복잡한 일이었다....

 

대망의 퀘스트 2. 팀원분과의 미연시

public static void Sujin1(Player player)
{
    Console.Clear();
    Console.WriteLine();

    Console.WriteLine("| ♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡-----------------------------------|");
    Console.WriteLine("|                                      |");
    Console.WriteLine("|      수진이의 마음을 얻기 위해선            |");
    Console.WriteLine("|      수진이의 취향을 잘 알아야겠지?         |");
    Console.WriteLine("|      밸런스 게임을 맞춰보자!                   |");
    Console.WriteLine("|                                      |");
    Console.WriteLine("|------------------------------------♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡");


    Console.WriteLine();
    Console.WriteLine("1. 밸런스 게임 진행하기");
    Console.WriteLine("0. 마을로 돌아가기");
    Console.WriteLine();
    Console.WriteLine(" * 게임을 진행하는 동안은 마을로 돌아갈 수 없습니다. *");
    Console.WriteLine();

    int choice = ConsoleUtility.PromptMenuChoice(0, 1);

    switch (choice)
    {
        case 0:
            GameManager gameManager = new GameManager(); //게임매니저 인스턴스 생성                       
            gameManager.MainMenu(player);  // 플레이어 정보를 MainMenu 메서드에 전달
            break;

        case 1:
            Sujin2(player);
            break;
    }
}

마침 우리 아이템중에 수진이의 사랑 이라는 아이템이 있었는데, 이걸로 퀘스트를 만들어보면 좋겠다고 생각했다.

사랑을 얻기위한 여정은 뭐가 있을까 - 미연시!@! 가 되어 미연시를 제작하려 했으나, 실제 사람 가지고

대화로 루트짜고 이런게 넘.. 낯간지러워서 그냥 밸런스 게임 맞추기 정도로 바꾸었다.

 

 public static void Sujin2(Player player)
 {
     Console.Clear();
     Console.WriteLine();

     Console.WriteLine("| ♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡-----------------------------------|");
     Console.WriteLine("|                                      |");
     Console.WriteLine("|              <첫번째 문제>                  |");
     Console.WriteLine("|                                             |");
     Console.WriteLine("|            부먹     VS     찍먹                 |");
     Console.WriteLine("|                                      |");
     Console.WriteLine("|------------------------------------♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡⃘♡");


     Console.WriteLine();
     Console.WriteLine("1. 부먹");
     Console.WriteLine("2. 찍먹");
     Console.WriteLine();

     int choice = ConsoleUtility.PromptMenuChoice(1, 2);

     switch (choice)
     {
         case 1:
             Console.WriteLine();
             Console.WriteLine("틀렸습니다. 수진이는 찍먹파입니다.");
             Console.WriteLine("아무 키를 눌러 퀘스트 화면으로 돌아가세요.");
             Console.ReadKey();
             break;

         case 2:
             Console.WriteLine();
             Console.WriteLine("정답입니다.");
             Console.WriteLine("아무 키를 눌러 다음 문제로 넘어가세요.");
             Console.ReadKey();
             Sujin3(player);
             break;
     }
 }

그래도 약간 미연시 느낌을 내어주기 위해 콘솔창도 약간 러블리하게 꾸며보았다.

 

.

.

 

이 퀘스트를 만들 때의 가장 큰 문제는 다음 씬으로 넘어가야 하는데 안넘어간다는 것이었는데,

그 문제의 해결법이 int choice = 콘솔유틸리티.프롬프트 넣어줘서 안정화를 시키는 것이었다.

 

저 유틸리티를 만드신 팀장님이 이걸 콘솔 안정화를 해주는 역할로 쓰신다 했는데, 저걸 쓰면 씬이 원하는 대로 넘어가는데 쓰지 않으면 씬이 넘어가지 않고 메인메뉴로 계속 도르마무 당했다.

그래서 저걸 넣으면서 평범하게 안들어가지는 씬들은 모두  int choice가 들어가야 했기에 Switch 함수를 잔뜩 쓸 수 밖에 없었다. 이 문제의 근본적 원인도 아직 잘 모르겠고... 팀장님께서 계속 해보면서 알아내신거라 이게 왜 안돼는지, 이게 왜 돼는지를 알 수가 없다.

 

이 문제에 대해 .. 깊이 고민해보고 안돼면 한번 여쭤보러 가야겠다.

 

그리고 퀘스트 보상으로 아이템을 줘야 하는데, 그게 정말 어려웠다.

 List<Item> getItemList = Item.storeItems.FindAll(n => n.Name == "수진이의 사랑");

 int idx = getItemList.FindIndex(n => n.Name == "수진이의 사랑");

 Item questResultItem = getItemList[idx];

 if (questResultItem.Name == "수진이의 사랑")
 {
     Item.InventoryItems.Add(questResultItem);
     if (questResultItem.ThisItemType == ItemType.SPECIAL)
     {
         Item.GetBuff(player);
     }
 }

 

일단 아이템이나 인벤토리 부분을 내가 작성한게 아니였다 보니 좀 더 이식하기가 힘들었다.

이것 또한... 팀장님께서 해주신거라 내가... 잘 모르겠다.

 

오늘은 제출과 발표가 있던 날이라 너무 바빠서 일단 되기에 붙여서 사용했는데, 

이게 어떻게 작동하는 코드인지 여쭤보고 이해해보려 노력해야겠다.

 

 


 

 

캠프에서는 두번째지만, 나에게는 처음이었던 팀 프로젝트가 끝났다!!!

이번에 팀원분들이 너무 좋으셨고, 친절하시고 똑똑하셔서... 버스를 탈 수 있었던 것 같다.

나도 노력해서 버스기사 같은 사람이 되어야지.

팀 프로젝트에 앞서 사람들에게 민폐가 될까 걱정했지만, 다같이 으쌰으쌰 하니 재미있게 게임을 만들 수 있었다.

결국 필수구현도 다 구현했고, 추가구현도 많이 해냈기 때문에 대단하다고 생각한다!!!!

참 재미있었고, 얻어가는게 많은 프로젝트였다.