팀스파르타 내일배움캠프

[사전캠프 14일차] 숫자야구 만들기!!!

creator2041 2025. 4. 3. 16:55
using System;

namespace NumberBaseballGame
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 게임 시작 메시지 출력
            Console.WriteLine("숫자 야구 게임을 시작합니다!");
            Console.WriteLine("컴퓨터가 서로 다른 3개의 숫자를 선택했습니다. 맞춰보세요!");
            Console.WriteLine("각 자리의 숫자(0-9)는 중복되지 않습니다.\n");
            
            // 2. 컴퓨터가 선택할 3자리 숫자 배열 선언 (targetNumber)
            int[] targetNumber = new int[3];
            
            // 3. 랜덤 객체 생성
            Random random = new Random();
            
            // 4. 서로 다른 3개의 숫자 생성 (중복 없이)
            for (int i = 0; i < 3; i++)
            {
                // 새로운 랜덤 숫자 생성
                int newDigit = random.Next(10); // 0부터 9까지의 숫자
                
                // 중복 체크: 이미 선택된 숫자인지 확인
                bool isDuplicate = false;
                for (int j = 0; j < i; j++)
                {
                    if (targetNumber[j] == newDigit)
                    {
                        isDuplicate = true;
                        break;
                    }
                }
                
                // 중복이면 i를 감소시켜 다시 시도
                if (isDuplicate)
                {
                    i--;
                }
                else
                {
                    // 중복이 아니면 배열에 저장
                    targetNumber[i] = newDigit;
                }
            }
            
            // 5. 디버그용: 선택된 숫자 출력 (실제 게임에서는 주석 처리)
            Console.WriteLine("디버그: 컴퓨터가 선택한 숫자 = " + targetNumber[0] + targetNumber[1] + targetNumber[2]);
            
            // 6. 게임 관련 변수 선언
            int[] userGuess = new int[3]; // 사용자가 추측한 숫자
            bool guessedCorrectly = false; // 맞췄는지 여부
            int attempts = 0; // 시도 횟수
            
            // 7. 게임 루프: 사용자가 숫자를 맞출 때까지 반복
            while (!guessedCorrectly)
            {
                // 8. 시도 횟수 증가
                attempts++;
                
                // 9. 사용자에게 3자리 숫자 입력 요청
                Console.Write("Enter your guess (3 digits): ");
                string input = Console.ReadLine();
                
                // 10. 입력값 검증
                if (input.Length != 3 || !int.TryParse(input, out _))
                {
                    Console.WriteLine("Invalid input. Please enter a 3-digit number.");
                    attempts--; // 잘못된 입력은 시도 횟수에 포함하지 않음
                    continue;
                }
                
                // 11. 입력한 숫자를 배열에 저장
                for (int i = 0; i < 3; i++)
                {
                    userGuess[i] = int.Parse(input[i].ToString());
                }
                
                // 12. 스트라이크와 볼 계산
                int strikes = 0;
                int balls = 0;
                
                // 각 자리 비교
                for (int i = 0; i < 3; i++)
                {
                    // 숫자와 위치가 모두 일치 = 스트라이크
                    if (userGuess[i] == targetNumber[i])
                    {
                        strikes++;
                    }
                    else
                    {
                        // 숫자는 있지만 위치가 다른 경우 = 볼
                        for (int j = 0; j < 3; j++)
                        {
                            if (i != j && userGuess[i] == targetNumber[j])
                            {
                                balls++;
                                break; // 같은 숫자를 여러 번 세지 않도록 break
                            }
                        }
                    }
                }
                
                // 13. 결과 출력
                Console.WriteLine(strikes + " Strike(s), " + balls + " Ball(s)");
                
                // 14. 3개의 스트라이크인 경우 게임 종료
                if (strikes == 3)
                {
                    guessedCorrectly = true;
                    Console.WriteLine("Congratulations! You've guessed the number in " + attempts + " attempts.");
                }
            }
            
            // 15. 게임 종료 메시지
            Console.WriteLine("게임을 종료합니다. 아무 키나 누르세요...");
            Console.ReadKey();
        }
    }
}



1. 뭔가 이게 핵맨보다 쉬웠다. 고마워요 코드잇! 파이썬으로 해본게 도움이 됬어요!!

2. 계속 복습하고 읽고 해봐야 하겠다.