사전캠프/달리기반

달리기반 Lv.2 숫자 맞추기 게임

서보훈 2024. 8. 14. 15:24

  • 숫자 맞추기 게임을 작성하세요. 컴퓨터가 1부터 100 사이의 숫자를 선택하면 사용자가 그 숫자를 맞추는 게임을 구현하세요. 사용자가 숫자를 입력하면 컴퓨터는 숫자가 더 크거나 작은지 힌트를 줍니다. 맞출 때까지 반복합니다.
Enter your guess (1-100): 50
Too low! Try again.
Enter your guess (1-100): 75
Too high! Try again.
Enter your guess (1-100): 60
Congratulations! You guessed the number.

숫자 맞추기 게임 프로그램을 작성해야 합니다.

 

프로그램 흐름을 구성해보면

  1. Random 클래스를 통해 1에서 100 사이의 랜덤한 정수값 생성
  2. 입력한 숫자가 같을때까지 반복하는 반복문 구성
  3. 사용자로부터 입력을 받음
  4. 입력값 오류 판정(정수형인지, 1 ~ 100 사이의 값인지)
  5. 입력값이 정답인지 판정

의 흐름으로 구성됩니다.

 

먼저, Random 클래스의 인스턴스를 생성하고, 인스턴스를 통해 정수형 난수를 생성하도록 합니다.

//클래스 인스턴스 생성
Random random = new Random();
//1~100 사이의 숫자 생성
int randomNumber = random.Next(1, 101);
//테스트용
Console.WriteLine(randomNumber.ToString());
//입력받을 숫자값
int inputNumber = 0;

생성한 값이 정상적인지 확인하기 위해서 생성과 동시에 콘솔에 생성값이 나오도록 만들었습니다.

또한 사용자가 입력한 값을 받아줄 변수를 준비해주었습니다.

 

반복문을 구성하도록 하겠습니다.

//반복, ture 일때 반복됨으로, 숫자가 같지 않으면 반복됨
while (inputNumber != randomNumber)
{
    
}

while 반복문은 조건식이 true일경우 반복해서 실행합니다.

inputNumber 변수가 randomNumber와 같을때 반복을 끝내야하기 때문에, 조건식을 두 수가 같지 않을때 true가 반환되는 != 식을 사용해주었습니다.

 

반복문의 내용을 구성해주도록 하겠습니다.

입력값이 틀렸을경우, 다시 입력을 받아야하기 때문에 사용자로부터 입력받는 코드를 반복문 내에 만들어 주어야합니다.

//사용자에게 입력받기
Console.Write("Enter Your Guess (1 ~ 100) : ");
string input = Console.ReadLine();

ReadLine() 을 통해 입력받는값은 string 형태로 저장됩니다.

이 값이 1 ~ 100 사이의 정수값이 맞는지 확인하고, 정수형으로 변환해주는 코드를 짜주도록 하겠습니다.

//입력값 정수형으로 변환
if (int.TryParse(input, out inputNumber))
{
    //1~100 사이값만 입력 가능
    if (inputNumber > 0 && inputNumber <=100)
    {
        inputNumber = Convert.ToInt32(input);
    }
    else
    {
        Console.WriteLine("Wrong number, Enter 1 ~ 100 number");
        continue;
    }
}
else
{
    Console.WriteLine("Wrong Input, Try again");
    continue;
}

TryParse는 변환에 성공하면 true, 실패하면 false를 반환합니다.

if문에서 false를 받을경우 else문이 있으면 else문을 실행, 없으면 실행하지 않기 때문에 TryParse문을 if문에 사용하여 입력값이 정수형 값이 맞는지 판단해주도록 하였습니다.

 

입력값이 정수형값이 맞을경우, 입력값이 1에서 100 사이값이 맞는지 판정해주도록 만들었습니다.

또한 1 ~ 100 사이의 정수값이 아닐경우 continue 를 사용하여 반복문을 즉시 종료하고, 다음 반복을 시작하도록 구현하였습니다.

 

입력값이 정확할경우 inputNumber 변수에 입력한 값을 int형으로 변환하여 저장해줍니다.

 

마지막으로 오류가 없는 입력값을 받아서 이 값이 정답인지를 판단해주어야합니다.

//입력값 판정
if (inputNumber < randomNumber)
{
    //낮은숫자 입력
    Console.WriteLine("To Low! Try again");
}
else if(inputNumber > randomNumber)
{
    //높은숫자 입력
    Console.WriteLine("To High! Try again");
}
else
{
    //정답시 출력
    Console.WriteLine("Congratulations! You guessed the number.");
}

 

받은 입력값이 randomNumber보다 작을때, 클때, 같을때의 출력이 전부 달라야합니다.

마지막 else의 내용의 경우 이 반복이 끝나면 반복문이 끝나기때문에 반복문 끝의 다음줄에 써도 무관하지만, if와 else로만 구성할경우 if 조건문에 포함되지 않게되는 값이 같을때의 처리가 else문에서 처리되기 때문에 if ~ else if 를 꼭 사용해 주어야 합니다.

 

실행 결과를 보도록 하겠습니다.

 

첫번째줄에 테스트용으로 적어둔 무작위 숫자가 발생합니다. 해당 숫자는 실행할때마다 변경됩니다.

두번째줄에서 사용자로부터 입력을 받아서 다음 출력을 결정하게 됩니다.

a를 입력한결과 예외처리되어 잘못된 입력이라고 출력하고, 다시 입력을 받게됩니다.

마지막줄에서, 출력된 무작위 숫자와 같은 값을 입력하여 반복이 끝나고 프로그램이 종료된것을 볼 수 있습니다.

재시작시 이전과 다르게 47이 출력됩니다.

 


전체 코드입니다.

class FindNumber
{
    static void Main()
    {
        //클래스 인스턴스 생성
        Random random = new Random();
        //1~100 사이의 숫자 생성
        int randomNumber = random.Next(1, 101);
        //테스트용
        Console.WriteLine(randomNumber.ToString());
        //입력받을 숫자값
        int inputNumber = 0;

        //반복, ture 일때 반복됨으로, 숫자가 같지 않으면 반복됨
        while (inputNumber != randomNumber)
        {
            //사용자에게 입력받기
            Console.Write("Enter Your Guess (1 ~ 100) : ");
            string input = Console.ReadLine();

            //입력값 정수형으로 변환
            if (int.TryParse(input, out inputNumber))
            {
                //1~100 사이값만 입력 가능
                if (inputNumber > 0 && inputNumber <=100)
                {
                    inputNumber = Convert.ToInt32(input);
                }
                else
                {
                    Console.WriteLine("Wrong number, Enter 1 ~ 100 number");
                    continue;
                }
            }
            else
            {
                Console.WriteLine("Wrong Input, Try again");
                continue;
            }

            //입력값 판정
            if (inputNumber < randomNumber)
            {
                //낮은숫자 입력
                Console.WriteLine("To Low! Try again");
            }
            else if(inputNumber > randomNumber)
            {
                //높은숫자 입력
                Console.WriteLine("To High! Try again");
            }
            else
            {
                //정답시 출력
                Console.WriteLine("Congratulations! You guessed the number.");
            }
            
        }
    }
}