본문 바로가기
Programming/C, C++

C++ Up&Down (업앤다운) 게임 만들기

by Dev_카페인 2022. 12. 6.
반응형

[C/C++] Up&Down (업앤다운) 게임 만들기

Up & Down 게임 만들기

- 1 ~ n ( or 100 ) 사이의 랜덤 숫자 뽑기

- 범위 안의 숫자를 입력한다.

- 범위에서 벗어난 숫자를 입력할 경우 예외처리

- 입력값이랑 랜덤숫자랑 비교 후 같을 경우 클리어, 낮거나 높으면 안내

- 위 방법을 클리어까지 반복

- 함수를 사용하여 만들기

 

* 참고

#include <stdllib.h> rand 함수 사용을 위한 헤더파일

#include <time.h> time 함수 사용을 위한 헤더파일

 

#define INT_MAX  (내장매크로)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void InputMaxValue(int &max);
void CheckRange();
bool CheckAnswer(const int inputNum, const int randomNum);

int LimitMin = 0;			// 최소 범위
int LimitMax = INT_MAX;		// 최대 범위

int main()
{
	int maxNumber = 0;			// 최대 숫자
	int count = 0;				// 횟수
	int randomNumber = 0;		// 랜덤 숫자
	int inputNumber = 0;		// 입력 숫자

	srand(unsigned int(time(0)));	// 시드값 설정

	InputMaxValue(maxNumber);

	randomNumber = rand() % maxNumber + 1;	// 랜덤 값

	while (true)
	{
		printf("%d 번 째 도전 \n", ++count);
		printf("숫자를 맞춰 보세용 : ");
		scanf_s("%d", &inputNumber);
		printf("\n");
		//CheckRange();

		if (inputNumber <= LimitMin || inputNumber >= LimitMax)
		{
			// 입력값이 허용 범위보다 작음
			printf("입력 값이 허용범위를 벗어났습니다. \n");
			count--;
			continue;
		}

		if (CheckAnswer(inputNumber, randomNumber))
		{
			printf("정답 ! \n");
			printf("%d 번 째 도전에 맞췄습니다. \n", count);
			break;
		}
		CheckRange();
	}

	return 0;
}

// 최대 값 설정
// 기준 허용 범위는 0 ~ 21억쯤 (int값 허용 범위)
void InputMaxValue(int& max)
{
	while (true)
	{
		printf("몇 번 째 까지 뽑을까? \n");
		printf("최대 숫자 입력 N : ");
		scanf_s("%d", &max);
		// scanf_s("%d ", &maxNumber);
		// 위 코드의 경우 공백이 버퍼에 남아있게 되어 입력을 한 번 더 받게 됌

		printf("최대 숫자 입력이 완료되었습니다.  \n");
		if (max > LimitMin && max < LimitMax)
		{
			LimitMax = max + 1;
			break;
		}
		else
		{
			printf("입력한 값이 범위를 벗어났습니다. 다시 입력해주세요. \n");
			printf("현재 허용 범위 %d ~ %d \n", LimitMin, LimitMax);
		}
	}
}

// 현재 범위 출력
void CheckRange()
{
	printf("------------------------------\n");
	printf("현재 최소 값 : %d \n", LimitMin);
	printf("현재 최대 값 : %d \n", LimitMax);
	printf("------------------------------\n");
}

// 정답 체크
bool CheckAnswer(const int inputNum, const int randomNum)
{
	if (inputNum > randomNum)
	{
		// 입력값이 랜덤값보다 큼
		LimitMax = inputNum;
		printf("********다운******** \n");
	}
	else if (inputNum < randomNum)
	{
		// 입력값이 랜덤값보다 작음
		LimitMin = inputNum;
		printf("*********업********* \n");
	}
	else
	{
		return true;	// 정답
	}
	return false;		// 오답
}
반응형