반응형
<C언어로 야구게임 만들기>
컴퓨터는 0~9사이의 숫자중에서 서로 다른 세개의 수잦를 고르고, 사용자는 이것을 맞추는 게임이다.
중요한 것은 숫잦는 순서까지 정확히 맞춰야 한다는 것이다.
단, 사용자가 예상한 숫자를 입력할때마다 컴퓨터는 입력된 숫자와 컴퓨터 자신이 생각한 숫자가 비슷한지를 알려준다.
실제 게임에서도 out이라는 것이 있기 떄문에 out이 되면 숫자가 모두 일치 하지 않은 것을 의미한다
예) 컴퓨터가 고른숫자가 "1 4 9" 이고 사용자가입력한 숫자가 " 4 0 9"라고 하면 두개의 숫자 4와 9가 일치한다 여기서 9는 숫자와 위치까지 일치(Strike)하지만, 4는 숫자만 일치(BALL)한다. 이떄 컴퓨터는 "1SRIKE 1BALL"이라고 출력한다.
사용자는 9번에 도전기회를 가지고 도전기회를 9번 이상되면 프로그램이 종료한다.
소스코드
#include <stdio.h>
#include <stdlib.h> //난수
#include <time.h> //씨드값 시간으로 두기위해
void main()
{
int answer[3]; //답을 저장할 배열 생성
int player[3]; //사용자가 정답을 입력할 배열 생성
int strike = 0 , ball =0, out = 0; // strike 와 ball은 0으로 초기화한다.
int i,j;
int cnt = 0; //사용자가 입력한 횟수를 입력한다.
for(i=0; i<3; i++){
srand(time(NULL)); //현재 시간을 이용해서 씨드 결정
answer[i] = rand() % 9 + 1; // 1~9 사이의 숫자를 랜덤으로 answer[] 입력
for(j=0; j<i; j++){
if(answer[i] == answer[j]){ //answer[]배열의 중복된 숫자를 검사
i--;
break;
}
}
}
printf("9번 이상 입력하면 실패입니다.");
while(1){ //무한 루프 돌리기 Strike가 3이거나 cnt가 9회이상이면은 빠져나감
cnt++;
printf("\n숫자 3개를 입력하세요(1 ~ 9까지의 숫자를 입력 숫자는 1칸씩 띄고 합니다.) : ");
scanf("%d %d %d", &player[0], &player[1], &player[2]);
if(player[0] == player[1] || (player[1] == player[2]) || (player[0] == player[2])){ //중복된 숫자를 검사
printf("숫자는 중복을 허용하지 않습니다. 다시\n");
cnt --; //중복된 숫자를 입력했기 때문에 cnt(사용자 입력 횟수)를 다시 원래의 값으로 되돌린다.
continue;
}
if(player[0] == 0 || player[1] == 0 || player[2] == 0){ // 0을 입력받지 못하도록 검사
printf("숫자는 0을 허용하지 않습니다. \n");
cnt--; //중복된 숫자를 입력했기 때문에 cnt(사용자 입력 횟수)를 다시 원래의 값으로 되돌린다.
continue;
}
for(i = 0; i < 3; i++){
for(j=0; j < 3; j++){
if((answer[i] == player[j]) && i == j){ //컴퓨터가 입력한 숫자와 사용자가 입력한 숫자와 자리가 같을 경우 strike 값을 증가
strike++;
}
if((answer[i] == player[j]) && i != j){ //같은 값이지만 자리가 다르면 ball값을 증가
ball++;
}
if((answer[i]) != player[j] ){ //모든 숫자가 동일하지 않을 경우 out의 값을 증가
out++;
}
}
}
if(strike == 3){ //값과 자리가 모두 동일하게 되면 정답
printf("정답을 맞추셨습니다.");
break;
}
if(out >= 9){ //out이 9이상이면 모든 숫자가 맞지 않기 떄문에 밑에 printf문을 출력
printf("맞는 숫자가 하나도 없습니다(out) .\n");
out = 0;
}else{
printf("%d 스트라이크 %d 볼입니다.\n" , strike ,ball); // strike와 ball을 출력
out = 0;
}
if(cnt == 9) { //사용자 입력값이 9번 초과하여 프로그램 종료
printf("사용 횟수를 초과하여 실패입니다.");
break;
}
strike = 0;
ball = 0;
}
}
실행 화면
'study > C언어' 카테고리의 다른 글
[C언어] 주석처리 (0) | 2019.12.20 |
---|---|
[C언어] 1. HelloWorld (0) | 2019.12.20 |
[C언어] 테트리스 (0) | 2019.12.20 |
[C언어] 2차원 배열 회전 알고리즘 (0) | 2019.12.17 |
다차원 배열(2차원 배열, 3차원 배열) (0) | 2019.12.17 |