본문

[2017.10.06] 39. Android 테트리스 프로젝트 [블록 충돌 검사와 블록 쌓기]

도입
이전 포스팅(http://heepie.tistory.com/128)에 추가로 이번 포스팅에서는 테트리스 블록 충돌 검사와 블록 쌓기 기능을 추가 할 예정이다.


Android 테트리스 프로젝트 [블록 충돌 검사와 블록 쌓기]의 데이터 흐름

현재 MainStage의 상태를 표현하기 위해 MainStage에 'map'이라는 2차원 int 배열을 선언했다.

게임 스틱 버튼이 클릭되면 Controller를 통해 블록의 이동을 갱신하기 전 

1) MainStage의 상태를 가져온다. 

2) Block 클래스에서 충돌 검사를 한다.

3) 충돌이 있다면 이동 X (아래 버튼으로 충돌이 발생하면 MainStage 상태 갱신)

위의 과정을 거쳐 블록을 이동한다. 



문제점과 해결

1. 역할의 문제

처음 설계 당시 충돌 검사은 MainStage의 역할이었다. 그러나 구현을 진행하다보니 블록이 이동을 갱신할 때 블록이 주도적으로 MainStage의 상태와 비교해 처리하는 것이 맞다고 생각해 충돌 검사는 블록의 메소드로 변경했다.


2. MainStage와 Block 클래스의 의존성

MainStage와 Block 클래스의 독립성을 유지하기 위해 Controller를 통해 충돌 검사를 어떻게 해야할지 고민을 했었다. 그래서 MainStage의 상태를 2차원 배열로 선언하고 인자로 전달하는 방법을 선택했다.


3. 블록 쌓기 문제

아래 버튼의 경우는 블록으로 쌓아야하기 때문에 MainStage의 상태를 갱신해 리턴



스크린 샷



#안드로이드 프로젝트 #안드로이드 테트리스 #tetris #테트리스 프로젝트

공유

댓글