왼도우 콘솔 제어 및 키 입력 함수들....
정리. 오상문 sualchi@daum.net
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h> // kbhit(), getch()
#include <time.h> // Sleep()
#define OFF 0
#define on !OFF
// on은 대문자입니다. 다음 에디터에서 저장하면 소문자로 바뀌네요. -,,-;;
// 콘솔창 윈도우 핸들 얻음
#define GET_OUTPUT_HANDLE() GetStdHandle(STD_OUTPUT_HANDLE)
// SetConsoleTextAttribute(GET_OUTPUT_HANDLE, 색상값);
#define BLACK 0 // 검정색
#define DARK_BLUE 1 // 파란색
#define GREEN 2 // 녹색
#define BLUE_GREEN 3 // 청녹색
#define BLOOD 4 // 검붉은색
#define PURPLE 5 // 보라색
#define GOLD 6 // 금색
#define ORIGINAL 7 // 밝은회색(원래 콘솔 색)
#define GRAY 8 // 회색
#define BLUE 9 // 파란색
#define HIGH_GREEN 10 // 연두색
#define SKY_BLUE 11 // 하늘색
#define RED 12 // 빨간색
#define PLUM 13 // 자주색
#define YELLOW 14 // 노란색
#define WHITE 15 // 흰색
// 키 입력 제어
#define EXTENDED_KEY 224
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define SPACE 32
#define ENTER 13
#define ESC 27
#define p 112
#define P 80
#define r 114
#define R 82
#define q 113
#define Q 81
// 시간 지연 매크로 함수(1/1000초 단위)
#define Delay(milsec) Sleep(milsec)
#define delay(milsec) Sleep(milsec)
// 글자 색 변경
// 흰색:WHITE(15),검정색:BLACK(0), ...
void TextColor(int color) {
SetConsoleTextAttribute(GET_OUTPUT_HANDLE(), color);
}
// 커서 on/OFF
void Cursor(int onoff) // OFF:0, on:1
{
CONSOLE_CURSOR_INFO curInfo;
GetConsoleCursorInfo(GET_OUTPUT_HANDLE(), &curInfo);
curInfo.bVisible = (onoff==ON);
SetConsoleCursorInfo(GET_OUTPUT_HANDLE(), &curInfo);
}
// 커서 위치 이동, (x,y)는 x행, y열, 시작:(1,1)
void GotoXY(int x, int y)
{
COORD Pos = { --x, --y }; // { x-1, y-1 };
SetConsoleCursorPosition(GET_OUTPUT_HANDLE(), Pos);
}
// 키보드 버퍼 비움
void ClearKeyBuf(void) {
while (kbhit()) getch();
}
// 화면 크기 조정 (가로, 세로 글자 수)
void ScreenMode(int cols, int lines) {
char str[100];
sprintf(str, "mode con:cols=%d lines=%d", cols, lines);
system(str);
}
// 입력된 키가 있으면 읽음 (확장 키면 확장 키 코드를 받음)
// 입력된 키가 없으면 돌아감...
int GetKey() {
int key = 0;
if (kbhit()) // 키 버퍼에 입력값이 있으면
{
key = getch();
// 224 값이면 확장 키 코드를 받아온다
if (key == EXTENDED_KEY)
key = getch();
} else
return -1;
return key;
}
// 확장 키 코드 입력 예제
int main()
{
int key;
ScreenMode(80,25);
Cursor(OFF); // 커서 사라짐
GotoXY(11,18);
printf("키보드 키를 누르면 확장 키 코드를 알려줍니다.");
TextColor(YELLOW);
while(1) {
delay(50);
key = GetKey();
if(key!=-1) {
GotoXY(13,25);
printf("%d번 코드 키가 눌렸습니다. ", key);
}
}
Cursor(ON);
TextColor(WHITE);
return 0;
}
[참조] 배하람님의 테트리스 코드에서 발췌하여 추가 정리한 코드입니다.
'C' 카테고리의 다른 글
C 언어, 1!+2!+3!+4!+5!+6! 출력하기 (0) | 2019.07.28 |
---|---|
C 언어, 파일에서 특정 알파벳으로 시작하는 단어 숫자 세기 (0) | 2019.07.20 |
C 언어, 복소수 합, 곱 예제 (0) | 2019.05.23 |
C 언어, 10진수를 2진수로 출력하기 (0) | 2019.05.17 |
C 언어, const 변수 선언 시 자료형을 지정하지 않으면 const int로 취급 (0) | 2019.05.16 |