본문 바로가기

C언어/테트리스

[C언어] GotoXY()함수로 콘솔 창의 커서를 내 마음대로 이동하는 방법

  • 커서 이동함수 GotoXY()

C언어로 게임을 만들기 위한 첫번째 단계는

바로 GotoXY()함수를 통해

커서를 원하는 곳으로, 자유 자제로 이동하는 방법을 알아야 합니다!!

 

GotoXY()함수를 사용하기 위해선

#include <windows.h> 헤더파일을 선언해 준 다음에!!

 

void GotoXY(int x, int y) {
	COORD Pos;
	Pos.X = x;
	Pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}

위와 같이 함수를 선언해 주시면 됩니다!!

 

그 후 내가 콘솔창의 원하는 좌표 값을 GotoXY의 매개변수로 x, y값을 보내면

해당 좌표로 이동하게 됩니다. !!!!

 

  • TMI,, COORD가 무엇인가요???

 

COORD의 정의를 보시면,

 구조체로 정의가 되어있습니다. 

COORD 구조체는 X, Y값을 멤버 변수로 저장할 수 있습니다.

 

 

 따라서 GotoXY함수안에서  X,Y 값을 저장할 수 있는 COORD 구조체를 Pos로 선언한 것입니다. 따라서 Pos는 COORD구조체 안에 있는 멤버변수인 X, Y를 . 연산자를 통해 사용이 가능합니다. ex) Pos.X = 12 ; Pos.Y = 2;

 GotoXY함수에는 x, y 두개의 매개변수가 있는데, 

콘솔창에서 내가 원하는 곳의 좌표값!을 매개변수인 x ,y로 넘겨 주면

그 매개변수 값을 Pos.X , Pos.Y에 각각 저장 후,

 

SetConsoleCursorPosition 함수

( 지정 된 콘솔 화면 버퍼에서 커서 위치를 설정해주는 함수)

 콘솔 화면 버퍼에 대한 표준 출력 핸들GetStdHandle(STD_OUTPUT_HANDLE) 와, x,y의 좌표 정보를 담고있는 Pos를 매개변수로 받아서 해당 Pos의 x, y 좌표값으로 커서위치를 설정해줍니다.

저도 처음엔 이 함수의 정의를 알고 싶어서

엄청 이해하고자 해맸었습니다.

 

하지만!!!

이 함수의 정의를 이해하기 보단, 함수를 선언해놓은 다음에 

일반 함수 사용하듯이!!!!!

main문에서 임의의 좌표값을 준 다음에 printf("하하하") 이런식으로

임의의 좌표값을 몇번 매개변수로 넘기면서 사용하면 

금방 "오호라? 그냥 요런 녀석이고만?" 임을 알게 되실겁니다.

 

예를들어

#include <stdio.h>
#include <Windows.h	>
void GotoXY(int x, int y) {
	COORD Pos;
	Pos.X = x;
	Pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}

int main(void) {
	GotoXY(30, 5);
	printf("어디에 출력되나?\n");

	return 0;
}

 

 

콘솔창의 맨왼쪽위의 좌표값은 항상 (0,0) 입니다.

(0,0)을 기준으로 두었던 커서값이 GotoXY(30,5) ;

X좌표로 30, Y좌표로 5칸 가라는 함수의 선언에 커서값이 변경된 것입니다.

 

 

 

 

 

 

콘솔창의 (0 , 0) 을 기준으로

오른쪽으로 갈수록 x값++;

아래로 갈수록 y값 ++;로 생각하시면 아주 편합니다.

그래서 결론은, 

함수의 정의에 신경쓰지 말고, 

함수를 선언한 후에 내가 출력하고 싶은 좌표값을 매개변수로 넣어주면 

커서값이 해당 함수로 이동한다는 말입니다!!

이후에 출력된 화면을 직접 드래그 해서 X로 몇, Y로 몇,,일일이 세어보시면 정말로

이해가 잘 되실겁니다!!