게임 개발 일지/내일배움캠프 TIL

TextRPG - Enum 활용하기 / 포션 획득 시 인벤토리에 중첩시키기

빛하_ 2023. 11. 22. 21:53

 

팀 프로젝트 - Text 게임 [스파르타 던전] 개발 - 버그 수정

 

과제 제출 전 최종적으로 버그를 수정하고 UI를 개선하는 작업을 했습니다!

 

1. 직업 목록에 뜨는 JobType을 string으로 바꾸기

 

 

콘솔창에서 상점 목록을 띄우면 아래처럼 직업란이 JobType 형태로 유지되는 현상을 고치고 싶었다.

 

<수정 전 코드>

 for (int i = 0; i < StoreArmor.Count; i++)
{

  if (Program.player1.Inventory.armorItem.Contains(StoreArmor[i]))  // 인벤토리에 아이템이 있는지 확인 
    {
     table.AddRow(StoreArmor[i].Name, StoreArmor[i].Level, StoreArmor[i].JobType, StoreArmor[i].Effect, StoreArmor[i].Explanation, "구매 완료");
    }
  else
    {
    table.AddRow(i + 1 + ". " + StoreArmor[i].Name, StoreArmor[i].Level, StoreArmor[i].JobType, StoreArmor[i].Effect, StoreArmor[i].Explanation, StoreArmor[i].Gold);
    }
}

 

table 속에 원래 존재했던 JobType을 string으로 바꾸기 위해 string job을 선언하고

switch 문으로 4가지 직업을 string으로 불러올 수 있게 만들었다.

 

<수정 후 코드>

            for (int i = 0; i < StoreArmor.Count; i++)
            {
                string job = "전사";
                switch (StoreArmor[i].JobType)
                {
                    case JobType.JT_Warrior:
                        job = "전사";
                        break;
                    case JobType.JT_Mage:
                        job = "마법사";
                        break;
                    case JobType.JT_Thief:
                        job = "도적";
                        break;
                    case JobType.JT_Archer:
                        job = "궁수";
                        break;
                }
                if (Program.player1.Inventory.armorItem.Contains(StoreArmor[i]))  // 인벤토리에 아이템이 있는지 확인 
                {
                    table.AddRow(StoreArmor[i].Name, StoreArmor[i].Level, job, StoreArmor[i].Effect, StoreArmor[i].Explanation, "구매 완료");
                }
                else
                {
                    table.AddRow(i + 1 + ". " + StoreArmor[i].Name, StoreArmor[i].Level, job, StoreArmor[i].Effect, StoreArmor[i].Explanation, StoreArmor[i].Gold);
                }
            }

 

짠~ 이제 위처럼 전사-마법사-도적-궁수 형태의 string으로 깔끔하게 표시된다.

 

 

2. 포션을 구매했을 때 인벤토리에 정상적으로 쌓이지 않는 현상

 

<문제 상황>

인벤토리에 포션이 들어가는 자리가 A, B 로 존재한다면

상점에서 포션을 구매했을 때 들어가는 자리가 새로 생성되어서 A,B 아래에 C,D 와 같이 쌓이게 되었다.

따라서 포션 수량에 제대로 중첩되지 않는 현상, 인벤토리 길이가 길어지는 현상이 발생했다.

 

<문제 해결 방법>

문제를 해결하기 위해 포션상점에서 player.Inventory에 있는 potionItem을 인식하도록 했다.

상점에서 포션1, 포션2를 구매할 때마다 Inventory에 원래 존재하는 포션1, 포션2 자리로 들어갈 수 있도록 했다.

int input = CheckValidInput(0, 2);
                if (input == 0)
                {
                    StoreBuy();
                }
                else
                {
                    if (Program.player1.Gold >= StorePotion[input - 1].Gold)
                    {
                        Program.player1.Gold -= StorePotion[input - 1].Gold;
                        Program.player1.Inventory.potionItem[input - 1].Count++;
                        Console.WriteLine("구매하는 중.. 잠시만 기다려주세요.");
                        Thread.Sleep(1000);
                        StoreBuyPotion();
                    }
                    else if (Program.player1.Gold < StorePotion[input - 1].Gold)
                    {
                        Console.WriteLine("Gold가 부족합니다.");
                    }
                }

 

Program.player1.Inventory.potionItem 자리가 포션 인벤토리 자리이고,

input이 1이면 Hp포션 자리에 한 개 추가, input이 2이면 Mp포션 자리에 한 개 추가할 수 있다. 

 

 

오늘의 회고

 

우와! 드디어 TEAM PENTAGON 의 textRPG가 완성되었습니다 :)

 

이번 팀 프로젝트에서는 필수과제까지가 목표였는데, 

좋은 팀원들 덕분에 선택과제 이상의 범위까지 경험해볼 수 있어서 뜻깊고 감사합니다.

책임감 있게 제 역할을 하면서도 다른 팀원들의 부분까지 챙겨줄 수 있는 좋은 팀이었습니다.

 

5명의 코드를 병합하고, 직접 기능을 작동시켜보면서 많은 오류들을 만났다.

오류가 발생할 때마다 어디서 문제가 생기는지, 어떻게 해결하는지 그런 과정을 보고 배울 수 있는 시간이었다.

게임을 하나 만들기 위해 얼마나 많은 고민이 필요한지,

클래스를 여러 개 펼쳤을 때 서로 어떻게 유기적으로 돌아가게 만들 것인지,

그리고 uml을 작성하면서 게임을 움직이는 요소를 전체적으로 이해하는 과정이 중요하다는 것도 배웠다.

 

이렇게 소소하게 나의 상점 캐릭터도 구현해볼 수 있어서 좋았다..

 

상점과 인벤토리 부분을 맡다 보니, 이렇게 유기적으로 연결되어 있는 파트의 경우

하나를 건드리면 다른 곳에서도 손을 들기 때문에 조심스럽게 접근해야 한다는 것을 배웠다.

발더스 게이트3에서 인벤토리 정렬 부분이 아쉬웠는데, 이렇게 아이템쪽 개발을 해보니까.. 왜 그런지 알 것 같다. 

진짜 쉽지 않은 것 같다.

 

개발자의 소통창구인 GitHub Desktop 을 계속 쓰다보니까 조금은 익숙해진 것 같다.

풀-푸쉬 도 자연스럽게 할 줄 알게 되었고, 

개발자 선생님들이 패치노트를 가끔 재밌게 쓰시는 이유도 알게 되었다..

뭔가 재밌게 쓰고 싶을 때가 있기 때문에..? 

 

내일은 조 전체 발표가 있는 날!

많은 분들의 아이디어를 볼 수 있기 때문에 기대된다.

 

내일도 힘내봅시다~