“COLOR [배경색][글자색]” 명령을 이용하면 콘솔 화면의 배경색과 글자색을 설정할 수 있습니다.
여기에서는 system(“COLOR A8”)을 호출하여 배경색 GREEN, 글자색 WHITE로 설정하였습니다.
글자색만 설정하고자 할 때는 SetConsoleTextAttribute 함수를 사용할 수 있습니다.
SetConsoleTextAttribute함수의 첫 번째 인자는 출력 파일 핸들, 두 번째 인자는 색상을 전달합니다. changecolor 함수에 색상을 전달받은 후 표준 출력 핸들과 함께 글자색을 설정하게 구현했습니다.
Sleep함수는 밀리초 단위로 멈추는 함수입니다. 여기서는 Sleep(300)으로 0.3초 주기로 화면을 바뀌게 하였습니다.
키를 눌렀을 때 멈출 수 있게 _kbhit 함수를 사용하였습니다. getchar, getch 함수 등과 달리 _kbhit 함수는 사용자 입력을 대기하지 않고 단순히 눌렀는지 확인할 수 있습니다.
코드의 주석과 함께 살펴보시기 바랍니다.
#include <Windows.h>//COORD,SetConsoleCursorPosition,SetConsoleTextAttribute,Sleep
#include<stdio.h>//puts
#include <stdlib.h>//system
#include <conio.h>//_kbhit
void gotoxy(int x, int y)
{
COORD Pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
typedef enum Color Color;
enum Color
{
BLACK, BLUE, GREEN, JADE, RED, PURPLE, YELLOW, WHITE, GRAY,
LIGHT_BLUE, LIGHT_GREEN, LIGHT_JADE, LIGHT_RED, LIGHT_PURPLE, LIGHT_YELLOW, LIGHT_WHITE
};
void changecolor(int color)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
const char* msgs[2] = { "★☆★☆★☆★☆ 광고판 ★☆★☆★☆★☆" ,"☆★☆★☆★☆★ 게임 ☆★☆★☆★☆★" };
Color colors[2] = { RED,LIGHT_BLUE };
void draw_msg(int on_off)
{
gotoxy(10, 2);//캐럿을 x좌표 10, y좌표 2로 이동
changecolor(colors[on_off]);//글자색 지정 on_off가 0이면 RED , 1이면 LIGHT_BLUE
puts(msgs[on_off]);//메시지 출력 on_off값에 따라 msgs[0] 혹은 msgs[1] 출력
Sleep(300);//0.3초 멈춤
}
int main()
{
int on_off = 0;
system("COLOR A8"); //배경색을 녹색(A), 글자색은 흰색(8)로 설정
while (1)
{
if (_kbhit())//키를 누르면
{
break;//반복문 탈출하여 프로그램 종료함
}
draw_msg(on_off);//메시지 출력
on_off = (on_off + 1) % 2;//메시지 번호 토글 0-1-0-1-0-...
}
return 0;
}