Skip to main content

열혈강의 C프로그래밍 – 도전! 프로그래밍 THREE – 6

숫자 맞추기 게임 프로그램(보통은 야구 게임이라고 불린다)을 작성해보자. 컴퓨터는 0에서 9사이의 숫자 중에서 서로 다른 세개의 숫자를 고르고, 사용자는 이것을 맞추는 게임이다. 중요한 것은 숫자의 순서까지 정확히 맞춰야 한다는 것이다. 단, 사용자가 예상한 숫자를 입력할 때마다 컴퓨터는 입력된 숫자와 컴퓨터 자신이 생각한 숫자가 얼마나 비슷한지를 알려준다.
예를 들어서 컴퓨터가 고른 숫자가 ”1 4 9”이고, 사용자가 입력한 숫자가 ”4 0 9”라고 하면 두 개의 숫자 4와 9가 일치한다. 9는 숫자와 위치까지 일치하지만(1 strike), 4는 숫자만 일치한다(1 ball). 이런 경우 컴퓨터는 다음과 같은 메시지를 출력해 준다. ”1strike, 1ball”, 만약에 사용자가 ”1 4 9”를 입력하였다면 ”3strike, 0ball”이 되어서 프로그램은 종료하게 된다. 이때 몇 번 만에 3strike를 얻어냈는지에 대해서도 출력해 주기로 하자(진행하면 ”몇 번째 도전입니다.”라는 메시지를 출력해 줘도 좋다.)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sbprint(int *c, int *u);

int main(void)
{
int com[3], user[3];
int i;

srand((int)time(NULL));
for(i=0; i<3; i++)
{
com[i]=rand()%9;
if(com[i]==com[i-1] || com[i]==com[i-2])
i–;
}

printf(”Start Game!\n\n”);

while(i!=0)
{
printf(”3개의 숫자 선택 : ”);
scanf(”%d %d %d”, &user[0], &user[1], &user[2]);

i=sbprint(com, user);
}

printf(”컴퓨터가 선택한 숫자 : %d %d %d\n\n”, com[0], com[1], com[2]);
printf(”Game End!\n”);

return 0;
}

int sbprint(int *c, int *u)
{
static int count=1;
int i, j;
int strike=0, ball=0;

for(i=0; i<3; i++)
{
if(c[i]==u[i])
{
strike++;
continue;
}
for(j=0; j<3; j++)
{
if(c[i]==u[j])
{
ball++;
break;
}
}
}

printf(”%d번째 도전 결과 : %dstrike, %dball\n\n”, count++, strike, ball);

if(strike==3)
return 0;
else
return 1;
}

댓글 남기기