Unity 개발 일지/달리기반 퀘스트

숫자 야구 게임

ohty20012 2025. 4. 3. 18:20
  • 변수 선언에 대한 이해
  • 배열에 대한 이해
  • 조건문( if, else )에 대한 이해
  • 반복문 ( for )에 대한 이해
  • 데이터 타입과 문자열 처리
  • 랜덤 숫자 생성 ( Random 클래스 )

숫자 야구 게임을 작성하세요. 컴퓨터가 3자리의 숫자를 선택하면 사용자가 그 숫자를 맞추는 게임을 구현하세요. 각 자리의 숫자를 비교하여 스트라이크와 볼의 개수를 출력합니다.

  • 숫자 야구 게임은 3자리의 숫자를 맞추는 게임입니다. 컴퓨터가 고른 3자리 숫자는 모두 다른 수자로 이루어져 있습니다. 사용자는 3자리 숫자를 입력하고 컴퓨터는 입력한 숫자와 자리수를 비교하여 스트라이크와 볼의 개수를 알려줍니다.
  • 스트라이크 : 숫자와 자리수가 모두 맞는 경우
  • 볼 : 숫자는 맞지만 자리수가 다른 경우
  • 예를 들어 컴퓨터가 427을 선택하고 사용자가 123을 입력했을 때, 2는 맞지만 자리수가 다르므로 1볼, 1은 맞지 않으므로 0스트라이크 입니다. 이 과정은 사용자가 정확한 숫자를 맞출 때 까지 반복됩니다.

사용 변수 설명

  • targetNumber : 컴퓨터가 선택한 3자리의 숫자를 저장하는 배열입니다.
  • userGuess : 사용자가 추측한 숫자를 저장하는 배열입니다.
  • strikes : 자릿수와 숫자가 모두 맞는 경우의 개수를 저장합니다.
  • balls : 자릿수는 맞지 않지만 숫자가 포함된 경우의 개수를 저장합니다.
  • guessedCorrectly : 사용자가 숫자를 정확히 맞췄는지를 나타내는 불리언 변수입니다.
  • 예상 출력

 

 

 

< 코드 >

class Program {
    public static void Main() {
        int[] targetNumber = new int[3];
        int[] userGuess = new int[3];
        int strikes;
        int balls;
        string input;
        int attempts = 0;
        bool guessedCorrectly = false;

        Random random = new Random();
        int index = 0;
        while (index < 3) {
            int num = random.Next(0, 10);
            if (!targetNumber.Contains(num)) {
                targetNumber[index++] = num;
            }
        }

        while (!guessedCorrectly) {
            strikes = 0;
            balls = 0;
            attempts++;
            Console.Write("Enter your guess (3 digits) : ");

            input = Console.ReadLine();
            if (int.TryParse(input, out int num) && num < 1000 && num >= 0) {
                userGuess[0] = num / 100;
                userGuess[1] = num % 100 / 10;
                userGuess[2] = num % 10;
            } else {
                Console.WriteLine("Please Enter Positive Interger Less Than 1000");
                continue;
            }

            for (int i = 0; i < 3; i++) {
                if (targetNumber.Contains(userGuess[i])) {
                    if (targetNumber[i] == userGuess[i]) {
                        strikes++;
                    } else {
                        balls++;
                    }
                }
            }

            Console.WriteLine($"{strikes} Strike(s), {balls} Ball(s)");
            if (strikes == 3) {
                guessedCorrectly = true;
                Console.WriteLine($"Congratulations! You've guessed the number in {attempts} attempts");
            }
        }
    }
}

 

 

 

< 결과 >

 

 

 

< 해설 >

 int[] targetNumber = new int[3]; // 사용자가 맞춰야 할 숫자를 저장할 배열
 int[] userGuess = new int[3];    // 사용자가 입력한 숫자를 저장할 배열
 int strikes;
 int balls;
 string input;
 int attempts = 0;  // 사용자가 시도한 횟수
 bool guessedCorrectly = false;

 // 랜덤으로 숫자를 생성하되, 중복된 숫자가 없도록 생성
 Random random = new Random();
 int index = 0;
 while (index < 3) {
     int num = random.Next(0, 10);
     if (!targetNumber.Contains(num)) {
         targetNumber[index++] = num;
     }
 }
  • 변수 선언 및 맞춰야 할 숫자( targetNumber ) 생성
  • 0 ~ 9 의 숫자 중 하나를 선택해서, 그 숫자가 targetNumber 배열에 없다면 추가해서 3자리 숫자 배열을 생성

 

  while (!guessedCorrectly) {
      strikes = 0;
      balls = 0;
      attempts++;
      Console.Write("Enter your guess (3 digits) : ");

      input = Console.ReadLine();
      if (int.TryParse(input, out int num) && num < 1000 && num >= 0) {
          userGuess[0] = num / 100;
          userGuess[1] = num % 100 / 10;
          userGuess[2] = num % 10;
      } else {
          Console.WriteLine("Please Enter Positive Interger Less Than 1000");
          continue;
      }
  • strikes와 balls 변수를 초기화, 시도 횟수를 1 증가
  • 사용자의 입력을 받은 후, 입력받은 문자열이 숫자가 아니거나, 0~999 사이의 숫자가 아닌 경우를 예외 처리
  • 사용자의 입력이 0 ~ 999 사이의 숫자인 경우, 한자리씩 끊어서 userGuess배열에 하나씩 저장

 

  for (int i = 0; i < 3; i++) {
      if (targetNumber.Contains(userGuess[i])) {
          if (targetNumber[i] == userGuess[i]) {
              strikes++;
          } else {
              balls++;
          }
      }
  }

  Console.WriteLine($"{strikes} Strike(s), {balls} Ball(s)");
  if (strikes == 3) {
      guessedCorrectly = true;
      Console.WriteLine($"Congratulations! You've guessed the number in {attempts} attempts");
  }
  • targetNumber 와 입력한 숫자( userGuess )를 비교해서 strikes와 balls를 증가시킴
  • strike가 3이 되면 게임을 종료시키고 축하 문구 출력

 

 

< .Contains( value ) >

  • 문자열, 리스트, 배열 안에 특정 값이 존재하는지 확인할 때 사용하는 메서드
  • 문자열, 리스트 배열의 자료형과 찾으려는 value 값의 자료형에 주의

'Unity 개발 일지 > 달리기반 퀘스트' 카테고리의 다른 글

행맨 게임  (0) 2025.04.01
배열 요소의 최대값과 최소값 찾기  (0) 2025.04.01
이중 반복문을 사용한 구구단 출력  (0) 2025.04.01
숫자 맞추기 게임  (0) 2025.03.31
팩토리얼 계산  (0) 2025.03.31