programming/c , c++

[테트리스개발] 테두리 그리기

worldint 2021. 7. 4. 21:16

[테트리스개발] 에서는 테트리스 개발하면서 배워간것들을 기록하는 테그입니다

 

※유의 사항

콘솔창에 테두리를 그리기위해서 사용한 '┌', '─', '┐' 이러한 문자들의 칸수가 원하는 갯수가 안나온다

처음 ┌ 에 "─" 이것을 넣을 때는 추가되지만 마지막"┐"을 넣으면 겹쳐진다.

예를들어 마우스 커서로 선택했을때 5칸의 가로선을 하고싶다면

┌ =1개, ─ =4개 ,  ┐=1개

이런식으로 6개의 문자가 필요하다.

#include <stdio.h>
#include <Windows.h>

void setCursor(int x, int y) {
	COORD pos = { x,y };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

int main(void) {


	int x= 0;
	int y = 3;
	int i = 0;

	setCursor(x, y);
	printf("┌");

	for (i = 0; i < 4; i++) {
		printf("─");
	}

	printf("┐");
    return 0;
    }

위 코드를 실행하면 콘솔창에 아래와같이 나온다.

저 하얀 부분이 마우스로 선택한 "─" 이 문자 하나의 크기이다

for문으로 4번 반복되었지만 앞의 ┌과 뒤의 ┐이것으로 총 6개의 가로선이 생겨야될줄알았지만

가로선은 5개가 생겼다, 뒤에 ㄱ 문자가 겹쳐진것같다.

확인 해본 결과

"─"이 문자를 한개 출력하면 마우스 커서 한칸이 아닌 두칸을 차지한다.

하지만 두개부터는 4칸이아닌 3칸을 차지한다.

아래는 "─"이 문자 두개출력한것과 한개 출력한것을 비교한것

보면 길이가 두배가 아닌 1.5배이다.

 

 

"┌" 이것은 두칸인데 뒤족한칸은 다음 선문자와 겹쳐진다

"─" 이것은 두칸이고 뒤쪽한칸은 다음 선문자와 겹쳐진다

"┐" 이건은 두칸이고 앞의한칸은 이전 선문자와 겹쳐진다

 

다음은 세로선

#include<stdio.h>
#include<Windows.h>

int main(void) {


	int x= 1;
	int y = 3;
	int i = 0;

	setCursor(x, y);
	printf("┌");

	for (i = 0; i < 2; i++) {
		printf("─");
	}
	x = 1;
	y = 4;
	printf("┐");
	setCursor(x, y);
	printf("│");
	
	y = 5;
	setCursor(x, y);
	printf("│");
    
    return 0;
    }

위와같이 세로선을 2번 출력해보면

세로로는 겹쳐지지않고 세로마우스커서는 가로마우스커서의 2배정도로 확인된다.