개발일지
article thumbnail

절대 음감 게임


#문제

8음계를 차래대로 들려준 후 랜덤으로 한 음을 들려주고 그 음을 맞추는 게임이다.


#풀이

#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;

void SoundPlay(int n, bool show)
{
	switch (n)
	{
	case 1:
		show ? cout << "도(1) " : cout << "";
		Beep(523.25, 500);
		break;
	case 2:
		show ? cout << "레(2) " : cout << "";
		Beep(587.33, 500);
		break;
	case 3:
		show ? cout << "미(3) " : cout << "";
		Beep(659.26, 500);
		break;
	case 4:
		show ? cout << "파(4) " : cout << "";
		Beep(698.46, 500);
		break;
	case 5:
		show ? cout << "솔(5) " : cout << "";
		Beep(783.99, 500);
		break;
	case 6:
		show ? cout << "라(6) " : cout << "";
		Beep(880, 500);
		break;
	case 7:
		show ? cout << "시(7) " : cout << "";
		Beep(987.77, 500);
		break;
	case 8:
		show ? cout << "도(8) " : cout << "";
		Beep(1046.50, 500);
		break;
	default:
		break;
	}
}

void Init()
{
	cout << "------------------------------------------" << endl;
	cout << " | 절대 음감 게임 | " << endl;
	cout << "------------------------------------------" << endl;
	cout << "설명 : 처음에 8음계를 들려주고.\n 다음에 8개 중 한 개의 음을 들려 준다.\n 그리고 그 음을 번호로 맞힌다." << endl;
	cout << "-----------------------------------------------------------------" << endl;
	cout << "준비하고 아무 키나 누른다" << endl;
	cout << "------------------------------------------" << endl;
	system("PAUSE");


	for (int i = 1; i < 9; i++)
	{
		SoundPlay(i, true);
	}
	cout << "\n------------------------------------------" << endl;
	for (int i = 3; i > 0; i--)
	{
		for (int j = 0; j < 4; j++)
		{
			cout << "\b";

		}
		cout << i << "...";
		Sleep(1000);
	}
	system("cls");
}

int main()
{
	int input;
	
	Init();

	while (true)
	{
		cout << "!!!준비!!!" << endl;
		Sleep(1000);

		int random = rand() % 8 + 1;
		SoundPlay(random, false);
		system("cls");

		input = _getch() - '0'; // 문자 '0'을 빼주어 숫자로 변환
		cout << input << endl;

		if (input <= 0 || input > 8)
		{
			cout << "값이 범위를 초과하였습니다." << endl;
			continue;
		}

		if (random == input)
		{
			cout << "정답입니다." << endl;
		}
		else
		{
			cout << "틀렸습니다." << endl;
		}

		while (true)
		{
			cout << "게임을 그만둘까요? (Y/N)" << endl;
			char ch = _getch();

			if (ch == 'N' || ch == 'n')
			{
				break;
			}
			else if (ch == 'Y' || ch == 'y')
			{
				return 0;
			}
			
			system("cls");
		}

		system("cls");
	}
}

윈도우 API의 Beep 함수를 이용하여서 소리를 내었습니다.

Init함수를 실행시켜 게임 설명으로 표시하고 SoundPlay함수로 소리를 재생시킨다. whlie문으로 랜덤하게 음 하나를 재생이키고 답을 입력받고 y, Y값이 나올때까지 계속 반복시킨다.

 

#Beep

Beep(DWORD dwFreq, DWORD dwDuration);

먼저 Beep함수는 윈도우 API를 사용하는것이기 때문에 #include <Windows.h>로 해더파일을 추가해야 된다.

dwFreq : 소리의 빈도(헤르츠)입니다. 이 매개 변수는 37~32,767(0x25~0x7FFF) 범위에 있어야 합니다.

dwDuration : 소리의 지속 시간(밀리초)입니다.

예제로 Beep(523.25, 1000); 는 도를 1초동안 재생합니다.

 

#Sleep

Sleep(DWORD dwMilliseconds);

이 함수도 Windows.h안에 있습니다.

Sleep 함수프로그램을 일정시간동아 대기 시킬때 사용합니다.

dwMilliseconds : 정지시킬 시간(밀리초)입니다.

Sleep(1000); 를 실행시키면 1초동안 대기시킵니다.

 

#system

system(char const* _Command);

 시스템 명령을 수행하는 함수입니다. 이 함수 또한 Windows.h에 있습니다.

system("cls"); 

콘솔창을 초기화 시킵니다.

system("pause");

프로그램이 실행되다가 특정 지점에서 일시적으로 멈추고 사용자의 입력을 기다리는 명령어입니다.

계속하려면 아무 키나 누르십시오 . . . 라는 메시지가 출력되고, 사용자가 아무 키나 누를 때까지 기다립니다.


#결과

윈도우 API를 이용하여서 만들었습니다.

 
profile

개발일지

@damin06

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!