처음 공부할때 만들어봤던건데.. 지금보면 굉장히 창피함...ㅋㅋ
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX 5 // 야구게임 자리수 (-1 값이 해당 자리수이다) #define COUNT 10 // 도전 기회 카운트 #define RAND_MAX 10 // rand 함수시 최대값 지정하기 위한 전처리 #define VERSTION "2.30" //... void Menu(int *strike, int *ball, int *count); // 메뉴 출력 함수 void Input(char *UNum); // 입력 함수 void Make_num(int Num[]); // 난수 생성 함수. void check(int Num[], char UNum[], int *strike, int *ball, int *count); // 입력받은값 체크 void check_print(int Num[], int *strike,int *count); // 체크 출력 void Help(); int main() { int Num[MAX] = {0,}; char UNum[MAX] = {0,}; int strike=0, ball=0, count=COUNT; int loop=1; srand(time(NULL)); Make_num(Num); while(1) { Menu(&strike,&ball,&count); Input(UNum); if(UNum[0] == 'q') break; if(UNum[0] == 'h') { Help(); continue; } check(Num,UNum,&strike,&ball,&count); } return 0; } void Help() { system("cls"); printf("야구 게임의 기초 룰 설명\n\n"); printf("서로 다른 숫자들의 조합으로 %d 자리수의 숫자를 맞추는 게임\n",MAX-1); printf("숫자와 자리수가 같을 경우 스트라이크 \n숫자는 같지만 자리가 다른 경우 볼 로 카운팅된다.\n"); printf("%d 번의 기회가 주어지며, 기회안에 맞추지 못할시 실패, 맞추면 성공이다 .\n\n",COUNT); system("pause"); system("cls"); } void Menu(int *strike, int *ball, int *count) { printf("────────────────────────────────────────\n"); printf("야 구 게 임\t\t\t\t\t\tVer %s\n", VERSTION); printf("\t\t\t\t현재 남은 횟수 : %d\n", *count); printf("%d 자리 수를 입력해주세요\n", MAX-1); printf("'h' 입력시 도움말 출력\t'q' 입력시 종료.\n"); } void Input(char *UNum) { printf("입력 : "); scanf("%s", UNum); fflush(stdin); } void Make_num(int Num[]) { int i,j,count; Num[0] = (rand() % RAND_MAX-1)+1; // 첫자리가 0일 수는 없으니 1~9 의 난수를 대입 for( i=1; i<MAX-1; i++ ) Num[i] = (rand() % RAND_MAX); // a[] 배열에 1~9까지의 난수 생성 while(1) // 중복값 검사를 위한 구문 { count = 0; for( i=0; i<MAX-1; i++) { for( j=0; j<MAX-1; j++) { if( i == j) continue; if( Num[i] == Num[j] ) // 각 배열값들이 같을때 난수를 생성하고 카운트함 { Num[j] = rand() % RAND_MAX; count++; } } } if(count == 0) // 각각의 모든 배열이 같지 않을 때 반복문 종료 break; } } void check(int Num[], char UNum[], int *strike, int *ball, int *count) { int i,j; int UNum_i[MAX] = {0,}; for(i=0; i<MAX; i++) UNum_i[i] = atoi(&UNum[i]); UNum_i[0] = UNum_i[0] / 1000; UNum_i[1] = UNum_i[1] / 100; UNum_i[2] = UNum_i[2] / 10; for(i=0; i<MAX-1; i++) { if(Num[i] == UNum_i[i]) // 숫자와 자리수가 같을때 스크라이크 카운트 (*strike)++; for(j=0; j<MAX-1; j++) { if(i==j) // 같은 자리수 일때 밖for 에서 처리했으므로 위로 던짐 continue; if(Num[i] == UNum_i[j]) // 숫자는 같지만 자리수가 다를때 볼처리 (*ball)++; } } printf("\n\n%s\n",UNum); printf("%d 스크라이크, %d 볼 \n\n", *strike, *ball); (*count)--; // 값을 한번 던졌으니 카운트 check_print(Num,strike,count); *strike = 0; *ball = 0; } void check_print(int Num[], int *strike,int *count) { int i; if(*strike == MAX-1) { printf("\n!!! 정답입니다 !!!\n"); printf("새로운 게임을 시작합니다.\n"); system("pause"); system("cls"); Make_num(Num); *count = COUNT; } else if(*count == 0) { printf("\n 실패하셨습니다 ㅠ_ㅠ\n"); printf("답 : "); for(i=0; i<MAX-1; i++) printf("%d", Num[i]); printf("\n"); printf("새로운 게임을 시작합니다.\n"); system("pause"); system("cls"); Make_num(Num); *count = COUNT; } } | cs |
'Programing > Example_Code' 카테고리의 다른 글
Blind SQL Injection Tool by Python ( Webhacking.kr 21번을 위한 ) (0) | 2015.09.22 |
---|---|
base64 인코딩, 디코딩 툴 ( Webhacking.kr 6번 문제를 위한 ) (0) | 2015.09.22 |
TCP 소켓 통신 서버, 클라이언트 연결 예제 ( C ) (0) | 2015.09.13 |
악성코드 기초 제작 (0) | 2015.09.12 |
Brute Forcing 재귀 구현 (0) | 2015.09.12 |