콘솔 위치 옮기기.

연습 2016. 7. 12. 00:00


 윈도우에서 콘솔을 컨롤하기 위해서는 출력부분을 초기에 받아서 사용한다.


 중요한 것은 컴퓨터에서 기본적으로 밖으로 출력하는 부분을 가지고오는 것인데, 이 함수는 다음과 같은 함수를 사용한다.


 GetStdHandle();[각주:1]


 이 함수는 핸들을 받아와서 개발자가 컨트롤을 할 수 있게 해주는 함수이다.


 GetStdHandle외에도 SetStdHandle이라고 해서 기본 핸들러를 수정할 수 있게 한다.


 여기서 StdHandle이란, 기본적으로 컴퓨터가 실행이 될때 설정이 되는 핸들이다.


 대표적으로 우리가 모니터에서 화면을 출력하게 만드는 것은 컴퓨터가 기본적으로 모니터에 출력값을 처리 할 수 있게 만들어 주기 때문이다.


 키보드와 마우스 또한, 컴퓨터에 입력을 받기 위해서 사용한다. 이게 가능한 것은 컴퓨터가 키보드의 입력을 기본적으로 받아들여서 처리하도록 입력이 받아져 있기 때문이다.


 그래서 출력하는 부분을 개발자가 받아서 이 것을 수정하도록 만들면 우리가 원하는 위치에 문자가 나오게 하거나, 커서가 이동되는 효과를 얻을 수 있게 되는 것이다.


 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
#include <stdlib.h>
 
#include <windows.h>
 
int main(int argc, char* argv[]){
    int x = 10;
    int y = 1;
    
    COORD pos = {x, y};
    
    HANDLE stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    
    SetConsoleCursorPosition(stdHandle, pos);
    printf("#\n");
    
    system("pause");
    
    return 0;
}
cs



 여기서 GetStdHandle이라는 것이 핸들을 반환한다고 했기 때문에, 우리는 HANDLE 형태의 변수를 사용해야된다. 그리고, 평면위의 위치이기에. x, y라는 독립 변수가 2개를 가지는 변수 pos을 가지고 있어야된다.


 이제, 캔퍼스와 연필을 얻었으니, 점을 직어야 될 것이다.


 이러한 행동을 하는 함수가 바로 SetConsoleCursorPosition이다.


 핸들과 위치를 가지고 위치가 이동되는걸 알 수 있다.


 이렇게 해서 로그라이크의 이동을 표현 할 수 있게되고, 로그라이크에서 기본적으로 이걸 이용해서 제작하는 경우도 있다.


 리눅스에서는 SetConsoleCursorPosition이라는 함수는 없기에 이와 유사한 함수가 있는 라이브러리를 사용한다.


 그것을 curses와 ncurses라는 라이브러리이다.

  1. https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms683231(v=vs.85).aspx [본문으로]
Posted by JunkMam
,