맞고의 핵심은 역시 GameManager 클래스다.
게임매니저는...
저장된 데이터를 읽어와서,
플레이어 두명을 만들고, 보드를 만들고, 카드를 만들고,
메세지박스, 뷰박스를 만들고, 잡다한 정보들을 초기화하고, 카드를 섞고...
Game Status를 통해 게임을 통제한다.
게임을 수행하는 것은 플레이어지만, 플레이어는 게임매니저의 허락하에 각 절차를 수행하게 된다.
플레이어와 보드는 각각의 객체를 접근할 수 없고 게임매니저를 통해서만 정보의 교환이 가능하다.
복잡해 질 수 있지만 통제할 수 있는 방식이 더 매력적이라고 생각해서 이렇게 설계하였다.
보드는...
게임매니저가 카드를 섞어서 주면, Close List에 보관하다가,
게임매니저가 카드배포를 명령하면 지정된 대상(바닥, 유저, 컴퓨터)에게 카드를 배포한다.
카드배포 목적지 좌표와 모션설정은 카드배포 주체인 보드가 하게 된다.
또, 플레이어가 카드를 제출하면 카드를 받아 도착지 좌표와 모션설정을 한다.
플레이어는 카드를 던질 뿐 카드정리와 패를 맞추는 것은 보드의 임무이다.
플레이어가 먹은패도 목표지점과 모션설정을 보드가 한다.
플레이어가 카드에 모션과 좌표를 설정하는 경우는 상태방의 피를 가져올 때와
국진패를 피영역과 열끗영역사이에서 옮길 때 뿐이다.
플레이어는...
기본적으로 손에든 패와 먹은 패를 관리하는 것이 주 임무이다.
점수, 뻑, 박, 고/스톱, 돈 등 게임에 관련된 모든 정보를 관리하는 것도 플레이어다.
터치 이벤트에 의해 터치된 플레이어 카드를 판별하고 (혹은 컴퓨터의 경우는 제출할 패를 평가, 선택)
각종 선택상황 (국진을 쌍피 or 열끗, 흔들까?, 폭탄? 어떤패를 먹을까? 등)하게 된다.
카드는...
뒤집히고 오픈된 상태를 갖고, UNIT_MOTION을 상속하여 이동, 확대 가능하다.
UNIT_MOTION에는 확대/축소, 이동만 구현하였다. 맞고는 3가지만 있으면 된다.
메세지박스와 뷰박스
메세지 박스는 UNIT를 상속받은 객체이고, 뷰박스는 UNIT를 포함하는 객체이다.
메세지 박스는 각종 메세지를 표시하기 위해 사용되고,
뷰박스는 먹은패를 펼쳐서 보여주기 위해서 사용된다.
뷰박스를 메세지박스로 처리하지 않은 이유는 패의 개수에 따라서 크기가 동적으로 변경되어
여러장의 이미지가 필요하기 때문이다. UNIT계열은 한장의 Image밖에 표시할 수 없다.
[UI]
<게임화면> - 좌측에는 바닥패 우측에는 먹은패 하단에는 플레이어카드를 표시했다.
모바일 게임의 특성상 터치영역을 크게 할 수 있도록 하였다.
치트모드 ON: 좌측의 3장은 뒤집힌 패인데, 순서를 변경할 수 있다.
<메세지박스> 패선택을 할 수 있는 메세지 박스
메세지박스는 종료, 승리, 패배, 패선택, 흔듦확인, 폭탄확인 국진선택, 레벨업, 고스톱선택에 사용된다.
<뷰박스> 먹은패를 선택하면 종류별로 펼쳐진 패를 확인할 수 있다.
피개수를 기준으로 최대 25장을 표시할 수 있다.
치트모드에서는 컴퓨터의 패도 열람할 수 있다.
<레벨업> 컴퓨터의 머니가 모두 소진되면 레벨업이 되면서 추가 머니 획득과 판돈이 증가한다.
AI의 수준도 높아져야 하지만 미구현 상태.
<종료확인> Back key를 선택하면 종료확인 후 예를 선택해야 빠져나올 수 있다.
게임 중 이탈 시에는 패널티로 머니가 감소하고 패배처리된다.
[Back key처리]
/** Called when the activity is received key event. */
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (event.getKeyCode())
{
case KeyEvent.KEYCODE_BACK:
if (true == 처리할클래스.onBackKey())
return true;
}
}
return super.dispatchKeyEvent(event);
}
'프로그래밍 > Android' 카테고리의 다른 글
HTML 파싱 - 한글찾기 (0) | 2010.12.15 |
---|---|
안드로이드 퍼블리싱 (0) | 2010.12.13 |
안드로이드 맞고 - GameMenu (0) | 2010.12.06 |
안드로이드 맞고 - DrawManager (0) | 2010.12.06 |
안드로이드 맞고 - SoundManager (0) | 2010.12.06 |