절대 음감 게임
#문제
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를 이용하여서 만들었습니다.
'프로그래밍 > C++' 카테고리의 다른 글
[백준/C++] 10828번 스택 (0) | 2023.05.11 |
---|---|
[C++] 함수 인수 전달 방식의 차이점 이해하기 (0) | 2023.04.20 |
[백준/C++] 16076번 휴식이 필요해 문제풀이 (0) | 2023.04.01 |
[백준/C++] 2563번 색종이 문제풀이 (0) | 2023.03.20 |
[CodeUp/C++] 1226번 이번 주 로또 문제풀이 (0) | 2023.03.14 |