리눅스 터미널에서 돌아가는 테트리스 입니다.

주요 코드

void gotoxy(int x, int y) {
	printf("\033[%d;%df", y, x);
	fflush(stdout);
}
void printColorString(int color, char * str) {
	printf("\033[%dm%s\033[0m", color, str);
}

이렇게 두가지 되시겠다.
하나는 원하는 위치로 커서를 이동시키는 함수이고
하나는 색깔을 넣어서 글을 쓰게 만드는 것이다.

둘다 터미널 제어문자를 이용해서 구현하는데
gotoxy 의 경우에는 \033[y;xf 의 형식 으로 print 해주면되는데 이때 fflush(stdout)을 하는 이유는 당장 움직이라는 의미다.
저 부분은 사실 한 프레임이 끝날때 호출해주면 되겠다.

프레임이 끝날때 호출하는 이유는 화면을 그린다음 잠시 쉬게 되는데 flush 를 안하면 그리다 말기 때문이다.

그리고 글자에 색을 입히려면 \033[숫자;숫자m 의 형식으로 하는데 보통 숫자는 하나만 써줘도 된다. 값에 따라 배경색, 글자색이 정해져 있고 한번에 배경,글자 색을 설정해줄수도 있다.
예를든 함수에서 %s 뒤에 \033[0m 이 있는 이유는 색을 0으로 바꾸어라 라는건데 0은 디폴트 값을 의미하기 때문에 저렇게 해놨다. 안그러면 중간중간 생각지 않고 그냥 printf  호출하면 이상한 색으로 나오게 되니까... 뭐 이것도 적절히 알아서 해주면 되겠다.

0 : 모든 색과 스타일 초기화
1 : 굵게(bold) / 밝게
3 : 이탤릭체(italic)
4 : 밑줄(underline)
7 : 반전(글자색/배경색을 거꾸로)
9 : 가로줄 치기
22 : 굵게(bold) 제거
23 : 이탤릭체(italic)제거
24 : 밑줄(underline)제거
27 : 반전 제거
29 : 가로줄 제거
30 : 글자색:검정
31 : 글자색:빨강
32 : 글자색:초록
33 : 글자색:노랑
34 : 글자색:파랑
35 : 글자색:마젠트(분홍)
36 : 글자색:시안(청록)
37 : 글자색:백색
39 : 글자색으로 기본값으로
40 : 바탕색:흑색
41 : 바탕색:적색
42 : 바탕색:녹색
43 : 바탕색:황색
44 : 바탕색:청색
45 : 바탕색:분홍색
46 : 바탕색:청록색
47 : 바탕색:흰색
49 : 바탕색을 기본값으로

위 코드를 참조하면 되겠다.
일부 안먹히는게 있을지도모른다.
Posted by 동적할당
: