본문 바로가기
유니티

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

by shin0707 2024. 4. 25.
728x90

 

  • 주제

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


  • 오류 발생 및 해결

오류1.

while문 안에 switch 문을 넣어, 특정 숫자 입력시 마다 화면 이동을 구현했는데, 게임 시작 화면에서만 오류 없이 잘 실행되고 코드가 while문을 거치면서 오류가 발생했다.

 

예) 초기 시작 화면에는 1. , 2. , 3. 세가지 선택지가 있고, 다른 번호를 입력시 "잘못입력되었다"는 문구가 나와야 한다.

문제는 switch 속 case 마다 연결되어 있는 화면들에서 "0.나가기(메인화면)" 를 선택하면, switch에 나열되어있는 case 숫자만큼 선택지가 증가하는 오류가 발생하였다. --> (나가기 선택후 4번을 입력하면, case 4: 에 해당하는 화면이 실행됨)


해결1. 

while문 다음에 바로 switch문을 넣지 않고, if문을 먼저 사용해 조건을 더 추가하였다.

코드가 많이.. 복잡해졌지만, 실행해보니 예외없이 화면이동이 가능했다.

while (true)
{
    if (chosen == 1 || chosen == 2 || chosen == 3)
    {
        switch (chosen)
        {
            case 1: //상태보기
                itemData.StatsScene();
                chosen = int.Parse(Console.ReadLine());
                while (true)
                {
                    if (chosen == 0) //나가기
                    {
                        startScene.Intro();
                        break;
                    }
                    else
                        Console.WriteLine(" 잘못된 입력입니다.");
                        chosen = int.Parse(Console.ReadLine());
                }
                break;
            case 2: //인벤토리
                itemData.InventoryScene();
                chosen = int.Parse(Console.ReadLine());
                while (true)
                {
                    if (chosen == 0) //나가기
                    {
                        startScene.Intro();
                        break;
                    }
                    else if (chosen == 1) //장착 관리
                    { 
                    .....

오류2.

아이템을 구입할 때마다 아이템리스트에 그 아이템이 있는지 확인하고, 있으면 "이미 구매하였다"는 내용이 나오도록 코드를 구현하였다. 그런데 같은 아이템을 아무리 눌러도 "구매완료"만 나왔다.

아이템리스트 내 아이템 숫자가 증가하지 않았다.

//구매에 따른 소지 아이템 목록 작성
public void BoughtList(int a)
{
	//구매목록(구매번호,구매정보) 딕셔너리
	Dictionary<int, string> boughtDic = new Dictionary<int, string>();
    
	int count = boughtDic.Count;
	if (count == 0) 
	{
		if (a < 1 && a > 6)
			Console.WriteLine(" 잘못된 입력입니다.");
		else 
		{
			TryBuying(a); //재화관련 함수
		}
	}
	.....

해결2.

메서드 내에 리스트가 존재하여 값이 반영되지 않았었다. 그래서 리스트 위치를 메서드 밖으로 옮기니 제대로 작동되었다.

//구매목록(구매번호,구매정보) 딕셔너리
Dictionary<int, string> boughtDic = new Dictionary<int, string>();

//구매에 따른 소지 아이템 목록 작성
public void BoughtList(int a)
{
    int count = boughtDic.Count;
    if (count == 0) 
    {
        if (a < 1 && a > 6)
            Console.WriteLine(" 잘못된 입력입니다.");
        else 
        {
            TryBuying(a); //재화관련 함수
        }
    }
    else //데이터 존재
    {
        if (a < 1 && a > 6)
            Console.WriteLine(" 잘못된 입력입니다.");
        else
        {
            if (!boughtDic.ContainsKey(a))
            {
                TryBuying(a);
            }
            else
            {
                Console.WriteLine(" 이미 구매한 아이템입니다.");
            }
        }
    }
}

 

728x90
반응형