c언어-테트리스만들기3, 테트리스 블럭만들기, 다차원배열
2022. 2. 9. 11:56ㆍC언어
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
'C언어' 카테고리의 다른 글
내가 헷갈리는 포인터 파트 정리! (0) | 2022.05.23 |
---|---|
c언어 - 테트리스 만들기 초기 설정,4 블럭 낙하 (0) | 2022.02.12 |
c언어 -테트리스 만들기2 위치 지정하기, 키보드로 움직이기 (0) | 2022.01.28 |
c언어 - 테트리스 만들기1 - gotoxy함수 (0) | 2022.01.27 |
c언어 공부 - 거스름돈 프로그램, 계산기 프로그램, 숫자 확인 프로그램 (0) | 2022.01.27 |