본문 바로가기
유니티

Day 11 - 텍스트 게임 만들기(오류 해결 과정2)

by shin0707 2024. 4. 26.
728x90

  • 주제

 >>C#을 이용해 텍스트 게임 만들기 및 오류 해결2


  • 오류 발생 및 해결

<오류>

상점에서 "수련자 갑옷"을 구매 후, 인벤토리를 확인해봤더니 아이템 목록에 "수련자 갑옷"이 잘 추가되어 있었다.

장착관리로 가서 아이템을 장착해보려고 했는데, 갑자기 "수련자 갑옷"이 복제되어 아이템이 총 2개가 되어버렸다.

인벤토리 & 장착관리

 

InventoryItemList() 메서드는 인벤토리인벤토리-장착관리 화면의 각각의 아이템 목록 생성을 담당하고 있다.

그래서 한 단계씩 코드를 실행[F11]하여 InventoryItemList() 메서드가 어떻게 작동하고 있는지 살펴봤다.

//아이템 목록(인벤토리,장착관리)
public void InventoryItemList(int x) //x=0:인벤토리 x=1:장착관리
{
    if (boughtDic.Count > 0) //구매한 아이템이 있으면,
    {
        foreach (KeyValuePair<int, string> item in boughtDic) //구매목록을 살펴보고,
        {
                boughtValueList.Add(item.Value); //구매정보 리스트에 추가한다.
        }
        foreach (string value in boughtValueList)
        {
            for (int i = 1; i < boughtValueList.Count + 1; i++)
            {
                if (onDic.ContainsKey(i) && x == 1) //장착관리 목록리스트
                    Console.WriteLine(" - {0} [E]{1}", i, value);
                else if (!onDic.ContainsKey(i) && x == 1)
                    Console.WriteLine(" - {0} {1}", i, value);
                else if (onDic.ContainsKey(i) && x == 0) //인벤토리 리스트
                    Console.WriteLine(" - [E]{0}", value);
                else if (!onDic.ContainsKey(i) && x == 0)
                    Console.WriteLine(" - {0}", value);
            }
        }
    }
}

 

인벤토리 화면을 실행하면 InventoryItemList() 메서드를 거쳐서 아이템 목록을 만드는데,

로직은 다음과 같다.

>>구매한 아이템이 있는 경우, 구매목록을 살피고 boughtValueList 리스트에 아이템을 추가한다.

리스트를 살펴보고, 리스트 내 아이템 개수만큼 for문을 반복해서 실행한다.

 

장착관리 화면으로 가기 위해서는 무조건 인벤토리 화면을 거쳐서 가야하는데, 인벤토리 화면에서 구매목록에 있는 아이템이 boughtValueList 리스트에 추가되면, 리스트 내 아이템 개수는 1이 된다. 

장착관리 화면으로 넘어가면, InventoryItemList() 메서드가 다시 실행되고, boughtValueList 리스트에 이미 추가된 아이템이 다시 추가(오류 발생)되고, 리스트 내 아이템 개수는 2가 된다.

추가된 아이템을 다시 추가하면서, for문을 2번 거치게 되어 발생한 오류였다.


<해결>

첫번째 foreach 문을 통과할 때, 구매한 아이템이 boughtValueList 리스트에 없는 경우에만 아이템을 리스트에 추가하도록 if 조건문을 넣어주었다.

//아이템 목록(인벤토리,장착관리)
public void InventoryItemList(int x) //x=0:인벤토리 x=1:장착관리
{
    if (boughtDic.Count > 0)
    {
        foreach (KeyValuePair<int, string> item in boughtDic)
        {
            if (!boughtValueList.Contains(item.Value))  --> 코드 추가
                boughtValueList.Add(item.Value);
        }
        foreach (string value in boughtValueList)
        {
		....

 

 

728x90
반응형