/******************************************************************************
[문제] 숫자 야구 게임 프로그램 작성
아래 조건에 맞는 C언어 프로그램을 작성하시오.
[프로그램 설명]
- 컴퓨터는 1~9 사이의 서로 다른 정수 3개를 무작위로 선택한다.
- 사용자는 1~9 사이의 서로 다른 정수 3개를 입력한다.
- 입력값과 컴퓨터의 숫자를 비교하여 스트라이크(Strike)와 볼(Ball)을 계산한다.
· 스트라이크: 숫자와 위치가 모두 같음
· 볼: 숫자는 있으나 위치가 다름
- 3 스트라이크가 나올 때까지 게임을 반복 진행하며, 시도 횟수(라운드)를 기록한다.
- 최종적으로 정답과 함께 라운드 수를 출력한다.
[구현 조건]
다음의 함수들을 사용하여 구현할 것. 포인터 및 배열 사용은 금지하며, 함수 이름과 매개변수는 그대로 사용할 것.
1. int generateNumber(int n1, int n2)
- 1~9 사이 숫자를 하나 무작위로 생성하여 반환
- 인자로 전달된 n1, n2와 다른 숫자여야 함
- 총 3번 호출하여 com1, com2, com3을 완성할 것
2. int getInput(char* prompt)
- 사용자로부터 숫자 하나를 입력받아 반환
- prompt는 안내 문구로 출력함 (예: "첫 번째 숫자 (1~9): ")
3. int checkGuess(int com1, int com2, int com3, int user1, int user2, int user3)
- 컴퓨터 숫자와 사용자 입력을 비교하여 스트라이크/볼을 계산
- 결과는 "결과: X 스트라이크, Y 볼" 형식으로 출력
- 스트라이크 개수만 정수로 반환
4. void playGame()
- 게임의 전체 흐름을 제어
- com1~com3을 generateNumber로 생성
- user1~user3을 getInput으로 입력받음
- 중복 입력 또는 범위(1~9) 벗어난 경우 다시 입력받도록 처리
- checkGuess를 통해 판단하며, 3 스트라이크일 경우 성공 메시지와 라운드 수 출력 후 종료
[실행 예시]
⚾ 숫자 야구 게임을 시작합니다!
첫 번째 숫자 (1~9): 1
두 번째 숫자 (1~9): 2
세 번째 숫자 (1~9): 3
결과: 1 스트라이크, 1 볼
첫 번째 숫자 (1~9): 4
두 번째 숫자 (1~9): 5
세 번째 숫자 (1~9): 6
결과: 0 스트라이크, 2 볼
첫 번째 숫자 (1~9): 7
두 번째 숫자 (1~9): 3
세 번째 숫자 (1~9): 2
결과: 3 스트라이크, 0 볼
3 스트라이크! 정답입니다! 총 3 라운드 만에 성공!
[주의사항]
- 포인터, 배열 사용 금지
- 함수 이름과 변수 이름은 문제에 제시된 것 그대로 사용할 것
- srand(time(NULL)); 는 main 함수에서 한 번만 호출
*******************************************************************************/
#pragma warning (disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int generateNumber (int n1, int n2){
int n;
while(1){
n = rand() % 9 + 1;
if(n != n1 && n != n2){
break;
}
}
return n;
}
int getInput(int prompt){
int num;
printf("%d 번째 숫자 (1~9) : ", prompt);
scanf("%d", &num);
return num;
}
int checkGuess(int com1, int com2, int com3, int user1, int user2, int user3){
int strike = 0, ball = 0;
if (user1 == com1) strike++;
if (user2 == com2) strike++;
if (user3 == com3) strike++;
if (user1 == com2 || user1 == com3) ball++;
if (user2 == com1 || user2 == com3) ball++;
if (user3 == com1 || user3 == com2) ball++;
printf("result : %d strike, %d ball\n\n", strike, ball);
return strike;
}
void playGame(){
int com1, com2, com3;
int user1, user2, user3;
int round = 0;
com1 = generateNumber(0, 0);
com2 = generateNumber(com1, 0);
com3 = generateNumber(com1, com2);
printf("⚾ 숫자 야구 게임을 시작합니다!\n");
while(1){
user1 = getInput(1);
user2 = getInput(2);
user3 = getInput(3);
if (user1 < 1 || user1 > 9 || user2 < 1 || user2 > 9 || user3 < 1 || user3 > 9){
printf("1~9 사이 숫자만 입력하세요.\n");
continue;
}
if (user1 == user2 || user1 == user3 || user2 == user3){
printf("서로 다른 숫자를 입력하세요.\n");
continue;
}
round++;
if (checkGuess(com1, com2, com3, user1, user2, user3) == 3){
printf("3 스트라이크! 정답입니다.\n총 %d 라운드 만에 성공!\n", round);
break;
}
}
}
int main(){
srand(time(NULL));
playGame();
return 0;
}