- 주제
>>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)
{
....
'유니티' 카테고리의 다른 글
Day 13 - C# (제너릭, out & ref 키워드) (0) | 2024.04.28 |
---|---|
Day 12 - 텍스트 게임 만들기(오류 해결 과정3) (0) | 2024.04.27 |
Day 10 - 텍스트 게임 만들기(오류 해결 과정) (2) | 2024.04.25 |
Day 9 - C# 문법(클래스, 상속, 가상메서드 및 오버라이딩, 추상클래스) (0) | 2024.04.24 |
Day 8 - C# 문법(조건문, 반복문, 배열, 딕셔너리, 메서드, 오버로딩, 구조체) (0) | 2024.04.23 |