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. 계속 복습하고 읽고 해봐야 하겠다.
'팀스파르타 내일배움캠프' 카테고리의 다른 글
| [사전캠프 15일차] C# 기본 문법 및 개발 환경 이해 (2025.04.04) (2) | 2025.04.04 |
|---|---|
| [사전캠프 14일차] 행맨 & 숫자 야구 게임 구현 (2025.04.03) (0) | 2025.04.03 |
| [사전캠프 14일차] 행맨게임 만들기!!! (0) | 2025.04.03 |
| [사전캠프 13일차] 달리기반 해보기!! (0) | 2025.04.02 |
| [사전캠프 12일차] 유니티 빗물받는 르탄이 어플 만들어보기!! (1) | 2025.04.01 |