c언어/c언어 (문제풀기)
2_6. c언어로 야구게임만들기
byeol2ing
2017. 8. 28. 15:20
반응형
<C언어로 야구게임 만들기>
친구와 둘이서 숫자 마추기 게임을 해 본적이 있을 것이다.(보통은 야구 게임이라고 불리고 있어서 이것을 컴퓨터와 할 수 있도록 프로그램을 작성해보자. 게임의 방식은 다음과 같다.
컴퓨터는 0~9사이의 숫자중에서 서로 다른 세개의 숫자를 고르고,사용자는 이것을 맞추는 게임이다.
중요한것은 숫자의 순서까지 정확히 맞춰야 한다는 것이다.
단, 사용자가 예상한 숫자를 입력할때마다 컴퓨터는 입력된 숫자와 컴퓨터 자신이 생각한 숫자가 얼마나 비슷한지를 알게해준다.
예를들어, 컴퓨터가 고른숫자가 "1 4 9" 이고 사용자가입력한 숫자가 "4 0 9"라고 하면 두개의 숫자 4와 9가 일치한다. 9는 숫자와 위치까지 일치(1STRIKE)하지만, 4는숫자만 일치(1BALL)한다. 이런경우 컴퓨터는 "1STRIKE 1BALL" 이라고 출력한다.
3STRIKE로 숫자와 위치가 모두일치할때까지 프로그램을 종료하지 않는다.
이때 몇번만에 도전성공을 하였는지 표시해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { int i,j=0; int com[3]={0}; //컴퓨터에서 발생할 3가지 난수를 저장하는 배열 int mine[3]={0}; //사용자가 고른 3가지 숫자를 저장하는 배열 int strike=0; //STRIKE 갯수변수 int ball=0; //BALL갯수변수 int game=0; //GAME횟수변수 int end=0; //게임을 끝내기위해준 변수 while(com[0]==com[1]||com[0]==com[2]||com[1]==com[2]) //세가지숫자가 하나라도 같으면 반복해서 난수발생->세가지의 다른숫자 발생 { srand((int)time(NULL));//현재 시간을 이용해서 씨드 결정 for(i=0; i<3; i++) { com[i]=(rand()%9)+1;//난수 1~9숫자중 3번반복하여 COM배열에 저장(COM[0],COM[1],COM[2]) } } //------------------------컴퓨터가 고른 세가지 숫자를 배열에 저장-------------------------- while(end==0) //END변수가 0이면 계속 실행 (3STRIKE가 될때까지 실행) { printf("서로다른 숫자 0~9까지 세개를 입력해주세요.\n"); for(i=0;i<3;i++) { scanf("%d",&mine[i]);//세개의 다른 숫자를 사용자에게서 입력받아 MINE배열에 저장(MINE[0],MINE[1],MINE[2]) } if(mine[0]==mine[1]||mine[0]==mine[2]||mine[1]==mine[2]) //세가지숫자가 하나라도 같으면 게임시작불가능 { printf("입력한 숫자가 중복되었습니다.게임을 다시시작해주세요.\n"); break; //바로 앞의 반복문을 빠져나감, 곧 WHILE문을 빠져나가게됨. } // printf("%d, %d, %d // %d, %d,%d\n",com[0],com[1],com[2],mine[0],mine[1],mine[2]); //TEST //------------------------------사용자에게서 입력받음------------------------------------------------ for(i=0; i<3;i++) //FOR문 3번 반복 실행 { if (com[i]==mine[i]) //컴퓨터난수와 사용자의숫자를 같은배열끼리 비교하였을때, 만약 숫자가 같다면 { strike=strike+1; //STRIKE의 숫자를 +1증가시켜준다 } } for(i=0; i<3;i++) //FOR문 3번 반복 실행 { for(j=0; j<3; j++) //FOR문 3번 반복 실행 =>총 i=0, j=0,1,2/ i=1,j=0,1,2/ i=2, j=0,1,2 9번돌아감 { if(com[i]==mine[j]) //같은숫자가있는지 비교하여 { ball=ball+1; //참이라면 ball을 1증가시켜준다. break; //참이라면 com[i]의 i를 증가시켜 비교한다. } } } game++;//game횟수를 판단하는 변수로 게임을한번 돌릴때마다 증가시켜준다. printf("%d번째 게임 : %d strike %d ball\n",game,strike,ball-strike);//ball의 갯수는 총 ball에서 strike를 뺀 갯수다. if(strike==3) { end=1; //만약 3strike가 된다면, end를 1로주어 위의 while문을 실행시키지 않고 끝낸다. } strike=0; //3strike가 아니라면 strike와 ball을 초기화 해준다. ball=0; } return 0; } | cs |
<실행결과>
반응형