c언어-테트리스만들기3, 테트리스 블럭만들기, 다차원배열

2022. 2. 9. 11:56C언어

728x90

1차원 배열 한 학생의 국어,수학,영어점수

int score[3] = { 88,92,88 };

2차원 배열은 1차원 배열을 요소로 갖는 배열이다. 2명의 학생의 국어,수학,영어점수

int score[2][3] = { {88,98,78},{89,97,89} };

마찬가지로 n차원 배열은 (n-1)배열을 요소로 갖는 배열이다.

 

테트리스블럭은 4차원배열을 활용해서 만들 수 있다. 

 

# include <stdio.h>

int main(void)
{

	int block[7][4][4][4] = 
	{
		{   // 네모모양 블럭
			{
				{0,0,0,0},
				{0,1,1,0},
				{0,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,1,0},
				{0,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,1,0},
				{0,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,1,0},
				{0,1,1,0},
				{0,0,0,0}
			}
		},
		{ // T모양 블럭
			{
				{0,0,0,0},
				{0,1,0,0},
				{1,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,0,0},
				{0,1,1,0},
				{0,1,0,0}
			},
			{
				{0,0,0,0},
				{0,0,0,0},
				{1,1,1,0},
				{0,1,0,0}
			},
			{
				{0,0,0,0},
				{0,1,0,0},
				{1,1,0,0},
				{0,1,0,0}
			}
		},
		{    // 번개모양 블럭1
			{
				{0,0,0,0},
				{0,1,1,0},
				{1,1,0,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{1,0,0,0},
				{1,1,0,0},
				{0,1,0,0}
			},
			{
				{0,0,0,0},
				{0,1,1,0},
				{1,1,0,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{1,0,0,0},
				{1,1,0,0},
				{0,1,0,0}
			}
		},
		{   // 번개모양 블럭2
			{
				{0,0,0,0},
				{1,1,0,0},
				{0,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,0,0},
				{1,1,0,0},
				{1,0,0,0}
			},
			{
				{0,0,0,0},
				{1,1,0,0},
				{0,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{0,1,0,0},
				{1,1,0,0},
				{1,0,0,0}
			}
		},
		{   // 1자형 블럭
			{
				{0,1,0,0},
				{0,1,0,0},
				{0,1,0,0},
				{0,1,0,0}
			},
			{
				{0,0,0,0},
				{0,0,0,0},
				{1,1,1,1},
				{0,0,0,0}
			},
			{
				{0,1,0,0},
				{0,1,0,0},
				{0,1,0,0},
				{0,1,0,0}
			},
			{
				{0,0,0,0},
				{0,0,0,0},
				{1,1,1,1},
				{0,0,0,0}
			}
		},
		{   // L자형 블럭1
			{
				{0,0,0,0},
				{1,0,0,0},
				{1,1,1,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{1,1,0,0},
				{1,0,0,0},
				{1,0,0,0}
			},
			{
				{0,0,0,0},
				{1,1,1,0},
				{0,0,1,0},
				{0,0,0,0}
			},
			{
				{0,1,0,0},
				{0,1,0,0},
				{1,1,0,0},
				{0,0,0,0}
			}
		},
		{   // L자형 블럭2
			{
				{0,0,0,0},
				{0,0,1,0},
				{1,1,1,0},
				{0,0,0,0}
			},
			{
				{1,0,0,0},
				{1,0,0,0},
				{1,1,0,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{1,1,1,0},
				{1,0,0,0},
				{0,0,0,0}
			},
			{
				{0,0,0,0},
				{1,1,0,0},
				{0,1,0,0},
				{0,1,0,0}
			}
		}
	};
}

int block[7][4][4][4]에서 요소가 7인 배열은 테트리스 블럭의 모양의 종류를 말합니다.

그리고 첫번째로 요소가 4인 배열은 테트리스 블럭의 회전 유형을 말합니다.

그리고 나머지는 블럭을 만들기 위해서 있습니다.

 

후에 테트리스 블럭은 block[blockform][rotation][4][4]형태로 활용된다!

 

void drawblock(void)
{
	int i, j;

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (block[blockform][rotation][i][j] == 1)
			{
				gotoxy(current_x + j * 2, current_y + i);
				printf("■");	
			}
				
		}
	}
}

gotoxy함수를 이용해서 지정해준 좌표로 이동후 block배열이 1인 곳에서 ■을 출력한다.

 

필자가 고생한 점은 gotoxy의 (x,y)좌표와 배열의 i,j가 순서가 반대이고 ■이 x좌표 2칸을 차지한다는 점을 활용해서 

수식을 짜는 것이었다.

 

이상입니다.

 

 

728x90