[문제]
야구 게임을 컴퓨터와 할 수 있도록 프로그램을 작성해보자.
게임의 방식은 다음과 같다.
컴퓨터는 0에서 9사이의 숫자 중에서 서로 다른 세 개의 숫자를 고르고, 사용자는 이것을 맞춰야 한다. 중요한 것은 숫자의 순서까지 정확히 맞춰야 한다는 것이다. 단 사용자가 예상한 숫자를 입력할 때마다 컴퓨터는 입력된 숫자와 컴퓨터 자신이 생각한 숫자가 얼마나 비슷한지를 알려줘야 한다.
예를 들어서 컴퓨터가 고른 숫자가 1 4 9이고, 사용자가 입력한 숫자가 4 0 9이면, 두 개의 숫자 4와 9가 일치한다. 9는 숫자와 위치까지 일치하지만(1 strike), 4는 숫자만 일치한다(1 ball).
이런 경우 컴퓨터는 다음과 같은 메시지를 출력해 준다.
1strike, 1ball
만약에 사용자가 1 4 9를 입력하였다면 "3strike, 0ball"이 되어서 프로그램은 종료가 된다. 이때 몇 번 만에 3 strike를 얻어냈는지에 대해서도 출력해 주기로 하자. 또한 진행하면서 "몇 번째 도전입니다."라는 메시지도 출력해보자.
[실행결과]
Game Start!
3개의 숫자 입력: 1 2 3
1번째 도전 결과: 0strike, 2ball!
3개의 숫자 입력: 1 1 2
잘못된 입력, 재입력: 2 3 1
2번째 도전 결과: 2strike, 0ball!
3개의 숫자 입력: 2 3 5
3번째 도전 결과: 3strike, 0ball!
Game Over!
[코드]
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void ComSel(int* arr); // 컴퓨터가 서로 다른 3개의 숫자를 선택
int IsValid(int* arr); // 사용자 입력 유효성 검사, 유효하면 1 리턴
void UsrSel(int* arr); // 사용자가 3개의 숫자를 입력
int Compare(int* arr1, int* arr2); // 선택 결과 비교
int main(void)
{
int Com_arr[3];
int Usr_arr[3];
int result = 0;
printf("Game Start! \n");
ComSel(Com_arr);
while (result != 1)
{
UsrSel(Usr_arr);
result = Compare(Com_arr, Usr_arr);
printf("\n");
}
printf("Game Over! \n");
return 0;
}
void ComSel(int* arr)
{
srand((unsigned int)time(NULL));
arr[0] = rand() % 10; // 선택 1
do
{
arr[1] = rand() % 10;
} while (arr[0] == arr[1]); // 선택 2
do
{
arr[2] = rand() % 10;
} while ((arr[0] == arr[2]) || (arr[1] == arr[2])); // 선택 3
}
int IsValid(int* arr)
{
if ((arr[0] == arr[1]) || (arr[0] == arr[2]) || (arr[1] == arr[2]))
return 0;
else
return 1;
}
void UsrSel(int* arr)
{
int valid;
printf("3개의 숫자 입력: ");
while (1)
{
scanf_s("%d %d %d", &arr[0], &arr[1], &arr[2]);
valid = IsValid(arr);
if (valid == 1)
break;
else
printf("잘못된 입력, 재입력: ");
}
}
int Compare(int* arr1, int* arr2)
{
int i, j;
int ball = 0, strike = 0;
static int cnt = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (arr1[i] == arr2[j])
{
i == j ? strike++ : ball++;
break;
}
}
}
cnt++;
printf("%d번째 도전 결과: %dstrike, %dball!\n", cnt, strike, ball);
if (strike == 3)
return 1;
else
return 0;
}
<참고>
윤성우의 열혈 C 프로그래밍
'C 언어 > 연습문제' 카테고리의 다른 글
C언어 연습문제38 (0) | 2022.04.01 |
---|---|
C언어 연습문제37 (0) | 2022.04.01 |
C언어 연습문제35 (0) | 2022.03.31 |
C언어 연습문제34 (0) | 2022.03.31 |
C언어 연습문제33 (0) | 2022.03.31 |