[C언어 소스] 광고판 만들기 – 콘솔 배경색, 글자 색 설정

“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;
}