void makeSecret(int* nSecretNum); int CheckYourNum(int* nSecretNum , int* nYourNum);
int main(int argc, char* argv[]) { int nSecretNum[3] = {0} , // 컴퓨터가 생성할 secret 넘버를 저장할 변수배열 nYourNum[3] = {0} , // 사용자가 입력할 변수 nResult = 0 , // secret 넘버와 사용자 입력변수의 비교결과를 저장할 변수 , CheckYourNum 함수의 리턴값을 저장함 nGaemCount = 1 ; // 사용자가 한번 맞추기 시도할때 마다 count값이 증가하여 , 몇번만에 secret 넘버를 맞추는지 나타낸다.
char cGaemPlay ='Y'; // 게임이 끝나후 계속 여부를 확인할때 사용하는 변수
srand(time(0));
while(cGaemPlay == 'Y') { nGaemCount = 1 ; makeSecret(nSecretNum) ; // 게임 시작과 동시에 컴퓨터는 3자리 secret 넘버를 생성한다. while(1) { printf("Input Secret Number(ex:4 5 6):"); scanf("%d %d %d", &nYourNum[0] , &nYourNum[1] ,&nYourNum[2] ); // 사용자는 3자리 숫자를 입력하여 // 컴퓨터의 secret 넘버를 맞춘다.
nResult= CheckYourNum(nSecretNum ,nYourNum); // 사용자가 입력한 숫자와 컴퓨터의 secret 넘버를 // 비교하여 strike와 ball의 갯수를 리턴한다. // 1s1b => return 11 , 3s0s => return 30 , // 즉 strike는 10자리수 ball은 1의자리수로 조합하여 int 형으로 리턴한다.
if(nResult == 30) // CheckYourNum 함수의 리턴값이 30 이면 3strike 0 ball 이므로 사용자가 컴퓨터 secret 넘버를 맞추었으므로 게임이 종료된다. { puts("축하합니다. 시크릿넘버를 맞추셨습니다"); break; } } puts("게임을 계속하시겠습니까?(Y/N)"); cGaemPlay = getchar();
}
return 0; }
int CheckYourNum(int* nSecretNum , int* nYourNum) { // nSecretNum 포인터는 main함수에서 컴퓨터가 생성해서 저장한 int형 배열변수를 가리키는 포인터변수 // nYourNum 포인터변수는 main함수에서 사용자가 입력한 숫자 3개를 저장한 배열변수를 가리키는 포인터변수 // 두개의 배열을 각각 가리키는 포인터변수를 통해 상호비교하여 strike 와 ball의 갯수를 리턴한다.
int check = 0; int i, j; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(nSecretNum[i] == nYourNum[j]) { if(i == j) check += 10; else check += 1;