728x90
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
///////////////////////////////////////////////////////////////////////
/* 커서 설정 */
typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE;
void setcursortype(CURSOR_TYPE c) {
CONSOLE_CURSOR_INFO CurInfo;
switch (c)
{
case NOCURSOR:
CurInfo.dwSize = 1;
CurInfo.bVisible = FALSE;
break;
case SOLIDCURSOR:
CurInfo.dwSize = 100;
CurInfo.bVisible = TRUE;
break;
case NORMALCURSOR:
CurInfo.dwSize = 20;
CurInfo.bVisible = TRUE;
break;
default:
break;
}
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CurInfo);
}
////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/* 커서의 움직임 구현 */
void gotoxy(int x, int y) {
COORD CursorPosition = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition);
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
int main(void) {
setcursortype(NOCURSOR); // cursor 안보이게 설정
int x = 0, y = 0;
int key;
gotoxy(x, y);
printf("@");
while (1) {
key = _getch();
gotoxy(x, y);
printf(" ");
if (key == 224) {
key = _getch();
}
switch (key) {
case (int)'w': case 72:
if (y > 0) y--;
break;
case (int)'s': case 80:
if (y < 24) y++;
break;
case (int)'a': case 75:
if (x > 0) x--;
break;
case (int)'d': case 77:
if (x < 79) x++;
break;
}
gotoxy(x, y);
printf("@");
}
return 0;
}
/////////////////////////////////////////////////////////////////////////
주로 봐야할건 main 함수부분이다.
처음 cursor가 위치한 부분은 0, 0이고 커서를 0,0 으로 움직이고 해당 위치를 @ 로 나타낸다.
while 문을 사용하여 루프를 계속 돌며(Polling) key의 값이 들어오는지 확인하고 해당 key에 맞게 cursor를 옮긴다.
key값을 _getch() 함수를 사용해서 받아온다.
getch 함수는 conio.h에 있고 입력을 숫자로 반환하는 함수이다. getch()를 사용하면 에러가 뜨므로 앞에 언더바를 붙여서 사용하자.
키보드 입력을 받아서 switch를 이용해 wasd와 화살표로 상하좌우를 판단한다. 이때 화살표는 _getch를 두번 받아서 두번째 값을 사용한다. (F1 같은 펑션키도 마찬가지이다.)
반복문을 돌때마다 현재 있는 위치는 지우고 새로운 위치(입력이 없으면 현재위치)에 @를 작성한다
참고한 블로그
더보기
'STUDY > C, C++' 카테고리의 다른 글
[C] scanf 개행 문자 처리 (0) | 2021.06.09 |
---|---|
[C/C++] 버블 정렬, 카운트 정렬 (0) | 2021.06.03 |
[C/C++] 숫자퍼즐게임 (0) | 2021.05.11 |
[C] C 프로그래밍 문법 (1) (0) | 2021.03.31 |
[C] 개발환경 구축 (2) | 2021.03.31 |