_getch();
_getch 는 표준 입력과는 달리 값을 저장하지 않고 즉시 반환한다.
즉 엔터를 누르지 않아도 키를 누르면 바로 다음으로 넘어가게 된다.
#include <conio.h>
_getch() 를 사용하기 위해선 #include <conio.h> 헤더파일이 필요하다.
그리고 입력한 값의 데이터 타입에 따라 표시가 달라진다.
int key1 = _getch(); //int로 받기
cout << key1 << endl;
char key2 = _getch();//char로 받기
cout << key2 << endl;
결과
a를 두번 누른 결과
여기서 char형은 제대로 a로 표시 되었지만, int타입 a는 왜 97로 표시가 될까?
답은 아스키코드를 확인하면 알 수 있다.
a를 십진법으로 바꾸면 97이기 때문이다.
이외에 여러 특수문자나 영어를 10진법이나 16진법으로 바꿔서 사용할 수 있다.
연습 1
A ~ Z 키 중에 하나를 정답으로 설정한다.
하나의 키를 입력해서 설정된 값을 맞춘다.
입력한 키와 설정된 값이 맞으면 승리를 출력하고 프로그램 종료하고
틀리면 남은 기회를 보여주고, 5번 틀리면 정답을 알려주고 게임오버를 출력한다.
+ 추가로 틀릴 때마다 정답 알파뱃이 입력된 알파뱃 앞에있는지 뒤에있는지 힌트를 준다.
+ 추가로 입력된 값이 대소문자 구분없이 처리될 수 있도록 수정 해보자.
int answer;
int key2;
int chance = 5;
srand(time(NULL));
answer = rand()% 26 + 65;
do
{
cout << "A ~ Z중 하나를 입력";
int key = _getch();
key2 = key;
if (key2 > 96)
{
key2 -= 32;
}
cout << endl;
if (key2 != answer)
{
key2 > answer?
cout << "정답은 " << (char)key2 << "보다 낮습니다.\n"
:cout << "정답은 " << (char)key2 << "보다 높습니다.\n";
cout << chance - 1 << "번의 기회가 남았습니다.\n" << endl;
}
chance--;
if (chance==0)
{
break;
}
} while (key2 != answer);
if (key2 != answer)
{
cout << "정답은 " << (char)answer << endl;
cout << "GAME OVER" << endl;
}
else
{
cout << "정답" << endl;
}
결과
연습 2
콘솔용 탈출게임 10 * 10 크기의 맵을 구성한다.
(2차원 배열) 플레이어가 존재한다.(0, 0)
탈출구가 존재한다.(0, 0)을 제외한 랜덤 설정
WASD 키입력을 통해 플레이어를 이동시킨다.
플레이어가 탈출구에 도달하면 "탈출 성공" 출력 후 종료
SYSTEM("cls"); 를 이용해 콘솔 초기화를 사용한다.
string map[10][10];
int x, y;
int px, py;
int key2;
px = 0; py = 0;
srand(time(NULL));
for (int i = 0; i < 10; i++)// 지형 배치
{
for (int j = 0; j < 10; j++)
{
map[i][j] = "#";
}
}
do// 플레이어, 출구 배치
{
x = rand() % 10;
y = rand() % 10;
} while (x == 0 && y == 0);
map[x][y] = "E";
while (true)
{
map[px][py] = "O";
system("cls");
for (int i = 0; i < 10; i++)// 맵 깔기
{
for (int j = 0; j < 10; j++)
{
cout << map[i][j];
}
cout << endl;
}
if (px == x && py == y)
{
cout << "탈출 성공!";
break;
}
int key = _getch();
map[px][py] = "#";
if (key < 96)
{
key += 32;
}
switch (key)
{
case 97: //a
if (py != 0)
{
py -= 1;
}
break;
case 115: //s
if (px != 9)
{
px += 1;
}
break;
case 100: //d
if (py != 9)
{
py += 1;
}
break;
case 119: //w
if (px != 0)
{
px -= 1;
}
break;
default:
break;
}
}
결과
'코딩 > C++' 카테고리의 다른 글
[C++] 동적 배열 만들기 (0) | 2022.06.15 |
---|---|
[C++] 구조체 (0) | 2022.04.18 |
[C++] 배열 (0) | 2022.04.13 |
[C++] 제어문 (0) | 2022.04.12 |
[C++] 난수 생성 (0) | 2022.04.11 |