이건 주로 초보자들이 프로그래밍을 배울 때 많이 만들어보는 간단한 숫자 맞추기 게임이다.
사용자는 무작위로 생성되는 숫자 3개를 맞춰야한다.
단, 숫자는 0부터 9까지이며, 중복되는 숫자는 없다.
볼 카운트는 숫자가 틀린 경우는 아웃,
숫자는 맞았는데, 숫자의 위치가 틀린 경우는 볼,
숫자가 맞고, 숫자의 위치도 맞은 경우는 스트라이크로 계산된다.
예를 들어, 맞춰야하는 숫자가 3 6 4라고 할 때,
사용자가 3 0 6을 입력하면 1 스트라이크, 1 볼, 1 아웃이 되고,
4 1 2를 입력하면 1 볼 2 아웃이 된다.
이 게임은 사용자가 세 개의 숫자를 모두 맞출 때까지, 그러니까 3 스트라이크가 나올 때까지 계속된다.
이 프로그램을 C로 구현하면 다음과 같다.
펼쳐두기..
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void randnums(int numbers[]);
int getnums(int inputs[]);
void flush_stdin();
int main()
{
int numbers[3];
int inputs[3];
int strike, ball, out;
int i, j;
puts("Baseball Game!\n");
// generate unique random numbers
randnums(numbers);
while (1) {
if (!getnums(inputs)) {
continue;
}
/* calculate ball count */
strike = ball = out = 0;
for (i = 0; i < 3; ++i) { // inputs
for (j = 0; j < 3; ++j) { // numbers
if (inputs[i] == numbers[j]) {
if (i == j) { // Strike
++strike;
break;
} else { // Ball
++ball;
break;
}
}
}
}
out = 3 - strike - ball; // Out
if (strike == 3) { // 3 Strikes
puts("3 Strikes!");
printf("%d %d %d\n", numbers[0], numbers[1], numbers[2]);
break;
} else {
printf("%d S\n%d B\n%d O\n", strike, ball, out); /* print ball count */
}
}
return 0;
}
void randnums(int numbers[])
{
int i, j;
srand(time(NULL)); // initialize random number generator
for (i = 0; i < 3; ++i) {
numbers[i] = rand() % 10;
for (j = 0; j < i; ++j) {
while (numbers[j] == numbers[i]) {
numbers[i] = rand() % 10;
}
}
}
}
int getnums(int inputs[]) {
int i, j;
printf("input 3 numbers (0-9)-> "); // input prompt
if (scanf("%d %d %d", &inputs[0], &inputs[1], &inputs[2]) != 3) {
flush_stdin();
puts("input error: not a number!");
return 0;
}
flush_stdin();
for (i = 0; i < 3; ++i) {
if (inputs[i] < 0 || inputs[i] > 9) { // out of range
puts("input error: out of range!");
return 0;
}
for (j = 0; j < i; ++j) {
if (inputs[i] == inputs[j]) { // not unique numbers
puts("input error: numbers are not unique!");
return 0;
}
}
}
return 1;
}
void flush_stdin()
{
char c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}