Skip to content

Instantly share code, notes, and snippets.

@blood72
Created May 30, 2019 06:17
Show Gist options
  • Save blood72/a5058a42d6bd0af4514a028c82c1ff4e to your computer and use it in GitHub Desktop.
Save blood72/a5058a42d6bd0af4514a028c82c1ff4e to your computer and use it in GitHub Desktop.
학창 시절에 만든 C언어 숫자 추리 게임
#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