- 변수 선언에 대한 이해
- 배열에 대한 이해
- 조건문( 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 |