MFC(Microsoft Foundation Class Library)를 사용하지 않는다면 C언어를 이용하여 GUI를 구성하는 것은 불가능하다.
바람의 나라 등 2D 게임을 만들 때 캐릭터가 이동하기 위해서는 좌표가 필요한데,
CLI 환경에서 2D 게임을 흉내낼 수 있는 gotoxy() 함수에 대해 알아보자.
- 함수 정의
- 이름은 gotoxy()가 아니더라도 상관 없음
- SetConsoleCursorPosition() : 콘솔 커서 위치 변경
- 사용법
- x, y값에 이동하고자 하는 좌표를 매개변수로 전달
예제를 통해 확인해보자.
소스 코드는 아래와 같다.
#include <stdio.h>
#include <Windows.h>
#define MAX_X 60
#define MAX_Y 20
void gotoxy(int x, int y)
{
COORD Pos;
Pos.X = x;
Pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
int main() {
int X = (MAX_X / 2) + 2;
int Y = (MAX_Y / 2) + 1;
int site;
while (1) {
gotoxy(0, MAX_Y + 1);
printf("X coord : %d\n", X);
printf("Y coord : %d\n", Y);
gotoxy(X, Y);
printf("나");
site = getch();
switch (site) {
case 224: // arrow keys
site = getch();
switch (site) {
case 72: // top
if (Y != 0) {
Y--;
}
break;
case 75: // left
if (X != 0) {
X--;
}
break;
case 77: // right
if (X != MAX_X) {
X++;
}
break;
case 80: // bottom
if (Y != MAX_Y) {
Y++;
}
break;
default:
break;
}
default:
break;
}
system("cls");
}
}
gotoxy()에서 SetConsoleCursorPosition()를 사용하기 위해서 먼저 Windows 헤더파일을 include 해야 한다.
커서 위치 디폴트 값은 x, y 모두 0으로 시작하며 최댓값을 별도로 설정한다. (x = 60, y = 20)
좌표를 중앙으로 설정 후 시작하며 방향키 입력에 따라 커서 이동과 좌표를 출력한다.
방향키는 유니코드이며 1byte씩 두 번 값을 읽어 처리한다. 첫 1byte가 십진수 224값일 경우 방향키로 예상 가능하다.
두 번째 1byte의 값이 72, 75, 77, 80일 경우 각각 top, left, right, bottom으로 판단할 수 있다. 그에 따라 x, y좌표 값을
변경해주면 된다.
다음과 같이 응용해 볼 수도 있다.
'Language > C, C++, C#' 카테고리의 다른 글
[C] clock()을 이용한 타자연습기 만들기 (실행시간 측정) (0) | 2020.08.17 |
---|---|
[C] Sleep(), system("cls")를 이용한 주사위 굴리기 (0) | 2020.08.16 |
[C] 배열과 포인터의 관계 (0) | 2020.06.21 |
[C] 아스키코드(ASCII)와 유니코드(Unicode)란? (0) | 2020.06.09 |
[C] 프로그램 실행 과정 (빌드 과정) (0) | 2020.06.08 |