Created
May 30, 2019 06:17
-
-
Save blood72/a5058a42d6bd0af4514a028c82c1ff4e to your computer and use it in GitHub Desktop.
학창 시절에 만든 C언어 숫자 추리 게임
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h>//시간함수 사용. | |
#include <math.h>//pow(제곱)함수 사용. | |
#pragma warning(disable:4996) | |
// 답을 계산합니다. (크면 1, 작으면 -1, 정답이면 0 리턴) | |
int check_correct(int answer, int value, int count) | |
{ | |
if (answer < value) | |
{ | |
printf("컴퓨터1 : 그 숫자보다 큽니다. "); | |
return 1; | |
} | |
else if (answer > value) | |
{ | |
printf("컴퓨터1 : 그 숫자보다 작습니다. "); | |
return -1; | |
} | |
else // (answer == value) | |
{ | |
printf("컴퓨터1 : 정답입니다! %d번만에 찾으셨네요!\n", count); | |
return 0; | |
} | |
} | |
// 자동으로 게임하기 | |
void auto_gaming(int n, int range, int value) | |
{ | |
int closing; // 추리범위를 좁혀나갈 변수 | |
int answer; // 추측한 답 | |
int count = 0; // 정답외친 횟수 | |
int tmp; // 임시변수 | |
closing = range / 2; | |
answer = closing; | |
while (1) | |
{ | |
if (closing > 1) // ←int형이라 1에서 2를 나누면 0이되므로 예외를 설정. | |
closing /= 2; // 숫자를 반으로 쪼개 추리함! | |
printf("컴퓨터2 : 답은 %d입니다.\n", answer); | |
count++; | |
tmp = check_correct(answer, value, count);// 정답확인 | |
if (tmp == 0)// 정답이면 함수종료 | |
return; | |
else | |
answer += closing*tmp;// 정답이 크면 더하고 작으면 뺌 | |
if (count > n) | |
{//한도 내에 풀지 못함 | |
printf("컴퓨터1 : 당신이 지셨군요 ^^\n"); | |
break; | |
} | |
else | |
printf("남은 횟수 : %d\n", n - count); | |
} | |
} | |
// 수동으로 게임하기 | |
void manual_gaming(int n, int range, int value) | |
{ | |
int answer; // 추측한 답 | |
int count = 0; // 정답외친 횟수 | |
while (1) | |
{ | |
printf("나의 대답은? : "); | |
scanf("%d", &answer); | |
fflush(stdin); | |
count++; | |
if (!check_correct(answer, value, count))// 정답확인 | |
return;// 정답이면 함수종료 | |
if (count > n) | |
{//한도 내에 풀지 못함 | |
printf("컴퓨터1 : 당신이 지셨군요 ^^\n"); | |
break; | |
} | |
else | |
printf("남은 횟수 : %d\n", n - count); | |
} | |
} | |
int main() | |
{ | |
int n; // 2의 제곱 단위값 | |
int gamemode; // 수동,자동을 정할 변수 | |
int range; // 숫자의 범위 | |
int value; // 컴퓨터가 정할 숫자 | |
char cmd; // 게임을 계속 할 지 묻는 변수 | |
srand((unsigned)time(NULL)); | |
while (1) | |
{ | |
printf("범위는 0에서부터 2^n-1까지입니다.\n"); | |
printf("n의 값을 입력하세요. : "); | |
scanf("%d", &n); | |
fflush(stdin); | |
range = (int)pow(2, n); // 0~2^n-1까지의 범위 지정, pow는 제곱함수 | |
value = rand() % range; // 2^n개 범위 내의 변수 | |
printf("게임모드를 선택하세요(1-수동,2-자동) : "); | |
scanf("%d", &gamemode); | |
fflush(stdin); | |
printf("컴퓨터1 : 자, 숫자를 생각했습니다. 맞춰보세요.\n"); | |
switch (gamemode) // 게임을 시작합니다! | |
{ | |
case 1:// 수동모드로 실행 | |
manual_gaming(n, range, value); | |
break; | |
case 2:// 자동모드로 실행 | |
auto_gaming(n, range, value); | |
break; | |
} | |
printf("게임을 더 하시겠습니까?(y/n) : "); | |
scanf("%c", &cmd); | |
fflush(stdin); | |
printf("\n"); | |
if (cmd == 'n') | |
break; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment