[C#] 숫자 야구 게임

⚾게임설명

숫자야구란 감춰진 3개의 숫자가 무엇인지 맞추는 게임이다.

🤙 규칙

  1. 3자리 숫자와 위치가 모두 맞으면 성공
  2. 숫자는 1~9까지 구성되어 있으며, 각 숫자는 중복이 불가능
  3. 숫자와 자리의 위치가 맞으면 strike, 숫자만 맞고 위치가 다르다면 ball
  4. 숫자가 하나도 맞지 않을 경우 out

📌 SOURCE CODE

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace baseball
{
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
        }
    }

    class Test
    {
        int[] answer;
        public Test() // 입력한 숫자가 올바른 숫자인지 판별해주는 메소드
        {
            SetAnswer(); // 정답 설정
            Console.WriteLine("세자리 숫자를 입력해서 숫자를 맞춰주세요");
            while (true)
            {
                Console.Write("입력 : ");
                string input = Console.ReadLine();
                char[] inputArr = new char[3];

                inputArr = input.ToCharArray(); // 입력한 숫자를 배열에 한글자씩 담아줌
            
//                for(int i =0; i < input.Length; i++)
//               {
//                    inputArr[i] = char.Parse(input.Substring(i, i + 1));
//               }

                int inputNum = 0;
                if (!int.TryParse(input, out inputNum) || (inputNum < 100 || inputNum > 999))
                {
                    Console.WriteLine("잘못된 값을 입력하셨습니다. 3자리의 정수를 써주세요");
                    continue;
                }

                // 입력한 숫자가 중복되는지 확인
                if (inputArr[0].Equals(inputArr[1]) || inputArr[1].Equals(inputArr[2]) || inputArr[0].Equals(inputArr[2]))
                {
                    Console.WriteLine("중복된 값을 입력하셨습니다. 중복되지 않은 숫자 3자리를 입력해주세요");
                    continue;
                }

                // 정답을 맞췄을 경우 while문 종료
                if (IsCorrectAnswer(inputNum))
                {
                    Console.WriteLine("정답입니다!!");
                    Console.ReadKey();
                    break;
                }
            }
        }

        public void SetAnswer() // 정답 생성하는 메소드
        {
            int k = 0;
            answer = new int[3];
            while (k < 3)
            {
                bool isSet = true;
                answer[k] = new Random().Next(1, 10);
                for (int i = k - 1; i >= 0; i--)
                {
                    if (answer[k] == answer[i])
                    {
                        isSet = false;
                        break;
                    }
                }
                if (isSet)
                {
                    k++;
                }
            }
        }

        public bool IsCorrectAnswer(int inputNum) // 입력한 숫자와 정답을 비교하는 메소드
        {
            int s = 0;
            int b = 0;
            int[] input = { inputNum % 10, (inputNum / 10) % 10, (inputNum / 100) % 10 };

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (input[i] == answer[j])
                    {
                        if (i == j)
                        {
                            s++;
                        }
                        else
                        {
                            b++;
                        }
                    }
                }
            }
            Console.WriteLine($"스트라이크 : {s} 볼 : {b}");
            if (s == 3)
            {
                return true;
            }
            return false;
        }
    }
}

좋은 웹페이지 즐겨찾기