상태이상 : 호기심 중독

이것저것 알아두면 언젠간 도움이 된다.

코딩/그냥 만든 무언가

단지 3x3 사각형이 왔다갔다 할 뿐인 프로그램 - 2

IT코코아 2018. 9. 13. 02:16

전체 코드

void move() {
	int ch;

	do
	{
		ch = _getch(); //키보드로부터 입력
		ch = toupper(ch); //대문자로 변경.
		
		if (ch == 224) //특수키를 입력하면 두개의 값을 반환함. 방향키는 224 먼저.
		{
			switch (_getch()) //2번째 값을 받기위해 다시 호출.
			{
			case 77 : std::cout << "→";
				break;
			case 75 : std::cout << "←";
				break;
			case 72 : std::cout << "↑";
				break;
			case 80 : std::cout << "↓";
			}
			_putch('\r');    // Carriage return  
			_putch('\n');
		}
		
	} while (1); 

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



int cube[5][5] =
{
{ 0,0,0,0,0 },
{ 0,1,1,1,0 },
{ 0,1,1,1,0 },
{ 0,1,1,1,0 },
{ 0,0,0,0,0 },
};

void ShowCube(int X, int Y){
	int x, y;
	 
	for (y = 0; y<5; y++,puts(""))
	{
		setCursor(X, Y);
		for (x = 0; x<5; x++)
		{
			if (cube[y][x] == 1)
			{
				std::cout << "■";
				
			}
		}
		Y++;
		
	}
	Sleep(100);
}

void removeCube(int X, int Y) {
	int x, y;

	for (y = 0; y<5; y++, puts(""))
	{
		setCursor(X, Y);
		for (x = 0; x<5; x++)
		{
			if (cube[y][x] == 1)
				std::cout << "  ";
		}
		Y++;

	}
	Sleep(100);
}

int main()
{	
	system("mode con lines=50 cols=200"); //콘솔의 크기를 정해준다. 행, 열 순으로 지정

	while (1) {
		ShowCube(50, 10);
		removeCube(50, 10);
		ShowCube(60, 10);
		removeCube(60, 10);
	}
	
    return 0;
}                                 

int cube =

{
{ 0,0,0,0,0 },
{ 0,1,1,1,0 },
{ 0,1,1,1,0 },
{ 0,1,1,1,0 },
{ 0,0,0,0,0 },
};

main 함수 밖에 큐브의 모양(1)을 나타내는 2차원 배열을 선언해 줌.
전역변수로써 모든 함수가 접근 할 수 있게 된다.

void ShowCube(int X, int Y)

{
int x, y;
	 
	for (y = 0; y<5; y++,puts(""))
	{
		setCursor(X, Y);
		for (x = 0; x<5; x++)
		{
			if (cube[y][x] == 1)
			{
				std::cout << "■";
				
			}
		}
		Y++;
		
	}
	Sleep(100);
}

큐브가 나타나도록 하는 함수.
매개변수로 나타내고자하는 콘솔의 x,y 위치 성분을 빋는다.
큐브배열의 1을 확인하고 출력 하도록 한다.
Sleep을 걸어주는 이유는 큐브가 사라졌다 나타났다 하는 과정이 너무 빨리 이루어져 없어지는 효과가 보이지 않기 때문이다.

void removeCube(int X, int Y)

{
	int x, y;

	for (y = 0; y<5; y++, puts(""))
	{
		setCursor(X, Y);
		for (x = 0; x<5; x++)
		{
			if (cube[y][x] == 1)
				std::cout << "  ";
		}
		Y++;

	}
	Sleep(100);
}

큐브가 사라지도록 하는 함수.
ShowCube함수와 마찬가지로 매개변수의 의미는 같다.
사라지는 효과는 큐브가 있던 자리에 공백을 출력해 준다.

main

{	
	system("mode con lines=50 cols=200"); //콘솔의 크기를 정해준다. 행, 열 순으로 지정

	while (1) {
		ShowCube(50, 10);
		removeCube(50, 10);
		ShowCube(60, 10);
		removeCube(60, 10);
	}
	
    return 0;
}                                         

system()함수는 " "안의 문자열을 콘솔에서 쳐주는 함수.
즉 콘솔 명령어를 실행시켜준다.
"mode con lines=50 cols=200"은 세로로 50, 가로로 200만큼 콘솔창의 크기를 조절하는 명령어.
실제로 콘솔창에서 그대로 명령어를 쳐도 적용.
ShowCube 함수와 removeCube함수로 원하는 위치에 나타났다 없어졌다를 반복하도록 만든다.

다음에는 W, A, S, D로 큐브의 위치를 직접 이동 시킬 수 있도록 만들어 보자.

반응형