2018. 4. 22. 17:22 IT/Unity 게임개발
[unity 게임개발] 테트리스 게임 로직 개발 1
1.기획
타일 - 20 X 10
- 블럭은 테트리스의 기본 블럭 7가지 ( ㅁ,ㄴ,ㄱ,ㅣ,ㅜ,z, 반대 z)
- 블럭은 랜덤하게 맨위의 중앙에서 생성된다.
- 매 일정 시간마다 블럭은 한 칸씩 내려온다.
- 화살표 좌,우 에 따라 블럭은 한 칸씩이동하고, 위는 블럭을 오른쪽으로 회전, 아래는 블럭을 빠르게 내린다. spacebar는 바로 맨 아래로 블럭을 내린다.
- 하나의 줄이 가득차면 제거되고, 그 위의 칸이 모양 그대로 내려온다.
- 바닥에 고정된 블럭이 맨 위에 닿으면 종료된다.
2. 플로우
- 타일 생성
- 테트리스는 블럭이 좌우로 계속 움직이므로 움직일 수 있는 칸을 한정할 수 있도록 기존 타일에 +2 씩 하여 막을 공간을 만든다. ( 22 X 12 )
- 막는 타일은 -1로 값을 배정한다. ( 바닥 타일은 -2로 고정타일 취급)
- 위쪽 공간은 타일이 가득찼을 경우를 대비해 최대 4만큼 여유공간을 두고, 다른 값 -3로 배정하여, 고정된 타일이 -3에 닿았는지를 보고 종료를 판단한다.
- 고로 최종 배열은 25 X 12
- 블럭 생성
- 블럭의 최대길이가 4 이므로 각 블럭은 4X4배열에 저장. -
구조체? - 7개의 블럭을 4방향 회전했을때의 모양을 미리 7X4 배열에 각각 저장.
- 배열의 생성은 맵 타일의 4,4 위치에 생성.
- 유저 조작
- 좌 우 버튼
- 이동 할 위치의 맵 배열과 블럭배열을 비교하여 겹치지 않는다면, 이동한다.
배열을 좌우로 3씩 더 늘린다.- 맵 배열을 비교할 때 -1(벽)과 만나면 다음 밑에 칸으로 넘어간다.
- 이동 - 맵 배열에서 현재 블럭 배열의 1(블럭값)의 위치를 비우고, 이동하여 값을 채운다.
- 회전 버튼
- 블럭 배열에서 회전 인덱스를 +- 하여 회전한 배열을 위와 동일하게 비교하여 겹치지 않는다면 이동한다.
- 회전시 블럭이 맵배열을 벗어난다면? - 맵 배열의 벽(-1)을 만났을때부터 count를 세고, 맵을 벗어난 블럭 길이만큼 count++을 하여, count만큼 반대로 이동시킨다.
- 떨구기
- 블럭 배열의 인덱스가 존재하는 열을 맵배열에서 검색하여 고정 배열(-2)를 처음 만나는 count값을 구해 그만큼 내려주고, 고정블럭으로 변환한다.
- 블럭 이동 및 고정
- 블럭은 매 일정시간마다 내려온다.
- 블럭배열의 다음 이동 칸(아래)과 맵 배열을 비교하여 겹치지 않는다면 이동.
- 블럭 고정
- 만약 비교시 블럭배열과 맵배열의 -2(고정배열)이 겹친다면, 현재 위치에서 고정배열로 값을 변경하고, B로 돌아간다.
- 고정 후 맵 타일의 최상위를 검색해 -3이 아닌값이 있으면 종료로 판단.
- 라인제거
- 고정 배열로 변경시 고정배열들을 비교하여 행 전체가 -2(고정배열) 이면 해당 행을 제거한다. (0으로 변경)
- 라인이 제거되면 제거된 라인의 위 고정블럭들(-2)들은 제거된 count만큼 일정하게 내린다.
- 중간이 제거안될 경우는? - 라인 제거는 한 줄씩 요청하고, 가장 위 타일부터 제거를 요청한다. 하나의 함수에서 제거와 그 위의 타일을 내리는 작업까지 한다.
- 고정 블록이 최상위 공간을 벗어날때까지 B~D 반복
* 지적은 언제나 환영입니다.
'IT > Unity 게임개발' 카테고리의 다른 글
[unity 게임개발] 테트리스 게임 로직 개발 3 (0) | 2018.04.24 |
---|---|
[unity 게임개발] 테트리스 게임 로직 개발 2 (0) | 2018.04.23 |
[unity 게임개발] 지렁이 키우기 로직 개발 3 (0) | 2018.04.18 |
[unity 게임개발] 지렁이 키우기 로직 개발 2 (0) | 2018.04.16 |
[unity 게임개발] 지렁이 키우기 로직 개발 1 (0) | 2018.04.16 |