카테고리 없음
[C언어] 야구게임 - 구현
s뽈록이s
2012. 10. 22. 10:27
void main() { int save[3], input[3], strike, ball, i; srand((int)time(NULL)); save[0] = rand() % 10; back_1: save[1] = rand() % 10; if(save[1] == save[0])goto back_1; back_2: save[2] = rand() % 10; if((save[2] == save[0]) || (save[2] == save[1]))goto back_2; while(1) { printf("세 개의 정수를 입력해 주세요 : "); scanf("%d %d %d", &input[0], &input[1], &input[2]); if((input[0] < 0) || (input[0] > 9) || (input[1] < 0) || (input[1] > 9) || (input[2] < 0) || (input[2] > 9)) { printf("다시 입력해 주세요.\n\n"); continue; } if((input[0] == input[1]) || (input[0] == input[2]) || (input[1] == input[2])) { printf("다시 입력해 주세요.\n\n"); continue; } strike = 0; ball = 0; for(i = 0; i < 3; i++) { if(save[i] == input[0]){ strike++; input[0] = 100; } if(save[i] == input[1]){ strike++; input[1] = 100; } if(save[i] == input[2]){ strike++; input[2] = 100; } if(((save[i] - input[0]) == 1) && (input[i] < 10)) { ball++; input[0] = 99; } else if(((save[i] - input[0]) == 1) && (input[i] < 10)) { ball++; input[0] = 99; } if(((save[i] - input[1]) == 1) && (input[i] < 10)) { ball++; input[1] = 99; } else if(((save[i] - input[1]) == 1) && (input[i] < 10)) { ball++; input[1] = 99; } if(((save[i] - input[2]) == 1) && (input[i] < 10)) { ball++; input[2] = 99; } else if(((save[i] - input[2]) == 1) && (input[i] < 10)) { ball++; input[2] = 99; } } printf("strike = %d, ball = %d\n", strike, ball); if(strike == 3)break; } }
이번에는 뭔가 프로그램이 길다. 검사해야 하는 것들이 많기 때문에 if문이 만이 들어갔기 때문이다. 지금이야 프로그램 자체가 간단해서 main()함수에 다 들어가지만 앞으로 어려운 프로그램, 즉 요구사항이 많은 프로그램을 만들어야 할 경우에는 각 기능이나 요구사항을 함수별로 잘 만들어 호출하는 식으로 딱딱 만드는 것이 좋다.
우선 rand()함수를 이용해 컴퓨터로 부터 입력받는다. 입력을 받으면서 중복되는 값인지 확인하고 goto문을 통해 다시 입력받고 있다. 이제 사용자로부터 입력을 받는다. 사용자는 범위도 검사를 해야 한다.
이제 스트라이크와 볼의 갯수만 확인하고 다시 사용자로부터 입력을 받던지 프로그램을 종료하면 된다. 이거 자체는 간단하다. 그러나 버그들이 많다. 만약 컴퓨터의 입력이 0, 1, 9라고 치자.
사용자의 입력중에 0이 있다면 이 0은 스트라이크에도 포함이 되고 볼에도 포함이 되기 때문에 결과값에 스트라이크와 볼의 갯수가 많이 나올 수가 잇다.
스트라이크가 되었다면 이제 그 숫자는 더 이상 연산해서는 안된다. 볼도 마찬가지이다. 스트라이크 값이 0, 2,3인 경우 사용자가 1을 입력하면 볼이 두 개씩이나 올라간다.
여러 경우의 수가 많기 때문에 조금 복잡한 if문들이 많이 포함되었다.