본문 바로가기

C

[C언어] 실습: Baseball Game 프로그램 구현하기

반응형

Baseball Game 프로그램 구현하기


Baseball Game:

임의의 숫자 3개를 랜덤으로 저장하고, 그 값을 맞추도록 한다.

숫자와 위치가 정확히 맞으면 "strike", 숫자는 있으나 위치가 맞지 않으면 "ball"으로 한다.

 

저장된 숫자 입    력 출    력
8 6 4 7 2 0 0 strike, 0 ball
8 4 3 1 strike, 1 ball
3 8 6 0 strike, 3 ball
8 6 4 Perfect. Your count 4.

 

#include<stdio.h>
#include<stdlib.h>   // srand(), rand()
#include<time.h>     // time()

int main(void){

   int answer[3];
   int question[3];
   int strike, ball, count = 0;

   srand(time(NULL));   // 현재 시간(time())을 인자로 넘겨 seed 값을 변경해준다.

   question[0] = rand() % 9 + 1;   // 1 ~ 9까지의 난수를 발생시킨다.

   for( ; ; ){
      question[1] = rand() % 9 + 1;
      if(question[0] != question[1]) break;   // 첫번째 수(question[0])와 두번째 수(question[1])가 일치하지 않으며 반복문을 종료한다.
   }

   do{   // 첫번째 수와 세번째 수(question[2]) 또는 두번째 수와 세번째 수가 일치하면 반복문을 계속한다.
      question[2] = rand() % 9 + 1;
   } while(question[0] == question[2] || question[1] == question[2]);

   do{
      printf("Input number [num1 num2 num3] : ");
      scanf("%d %d %d", &answer[0], &answer[1], &answer[2]);

      strike = ball = 0;   // answer[] 숫자를 입력받을때마다 strike와 ball을 초기화 해준다.
      ++count;             // 숫자를 입력받는 횟수를 count한다.

      for(int i = 0; i < 3; ++i){
         for(int j = 0; j < 3; ++j){
            if(question[i] == answer[j]){   // question[i]와 answer[j]에 저장된 숫자가 같다.
               if(i == j) ++strike;         // 이 때, i와 j가 같으면 같은 배열상에 위치하였기 때문에 strike가 +된다.
               else ++ball;                 // 하지만 그게 아니면, 같은 숫자만 존재하기 때문에 ball을 +한다.
            }
         }
      }

      printf("%d strike, %d ball\n", strike, ball);
   } while(strike != 3);

   printf("Perfect! Your score is %d\n", count);

   return 0;
}

 

반응형