Mobile 맞고 게임 제작 강좌를 시작하며

Mobile 맞고 제작 강좌는 핸드폰 상에서 구현되는 맞고 게임을 구현하기 위한 강좌입니다.
맞고는 우리가 잘 알고 있는 고스톱을 2인 플레이의 기준에 맞게 변형시킨 게임입니다.

다음 시간부터 진행 될 전반적인 맞고 강좌의 목차는 다음과 같이 진행 될 것 입니다.

맞고 게임 구조 작성 및 게임 class 설계.
맞고 초기화 코드 및 로고 출력 구현.
각각의 메뉴 구현.
맞고 게임 방 만들기.
맞고의 룰 이해 및 게임 상수 정의.
맞고의 패 처리.
점수 처리 구현.
결과 출력 구현.
사운드 출력 구현.
디스플레이 요소 삽입.

대충 이러한 순서로 강좌는 진행 되게 될 것입니다.

강좌는 기본적으로 Eclipse 3.x과 SK-VM SDK 1.31로 작성되었으며,

컴파일러는 Eclipse 3.x 그 이후 버전이나, 또는 J-Builder와 같은 기타 IDE를 사용하셔도 무방하시리라 봅니다.

다음은 강좌에 사용될 프로그램들의 실행 화면입니다.

< SK-VM 1.3.1 > 화면

 

< Eclipse 3.0.0 > 화면

 


이번 시간에는 간단히 위에서 소개 드린 첫 번째 단계인 맞고 게임 구조 작성과 게임 class 설계를 한번 해볼까 합니다.

맞고 게임에 사용될 기본적인 클래스들은 다음과 같습니다.

[# Package : common]

Animation : 화면에 애니메이션을 출력할 때 사용되는 클래스.

BCollector : 숫자 배열을 관리하는 클래스.

Coord : x, y 좌표를 알고 있을 필요가 있을 때 사용되는 클래스.

CyDialog : 화면상에 표시되는 메시지, 알림창 등의 대화창을 표시해주는 클래스.

CyHelp : 도움말을 표시해 줄 때 사용되는 클래스.

CyItemList : 간단한 항목들을 표시할 때 사용되는 클래스.

CyMenu : 메뉴를 사용할 때 사용되는 클래스.

CyResMan : 이미지를 한번에 읽어와서 나중에 할당해 줄 때 사용되는 클래스.

DataManager : 게임에서 사용되는 변수나 기타 상태 값들을 핸드폰에 저장해 주는 기능의 클래스.

GameRoom : 게임방에 관련 된 사용자 등의 정보를 관리 해 주는 클래스.

GateMidlet : 모든 Midlet의 Parent로 기본적인 정보만을 가지고 있는 클래스.

Rect : 사각형의 좌표를 저장할 때 사용되는 클래스.

Room : 방에 관련된 기본적인 정보를 포함하고 관리하는 클래스.

Sleep : sleep에 관련된 모든 함수를 포함하고 있는 클래스.

SoundThread : 사운드를 출력할 때 사용되는 클래스.

Etc : 기타 게임에 필요한 함수들을 모아놓은 클래스.

[# Package : gostop]

GostopCard : 고스톱에서 사용되는 기본적인 카드 정보를 기억하고 있는 클래스.

GostopFloor : 고스톱 게임에서 바닥에 있는 게임의 상태를 알고 있는 클래스.

GostopRoom : 고스톱의 기본적인 룰을 적용시켜주는 클래스.

GostopView : 고스톱 화면에서 표시할 때 사용되는 repaint() 및 키 입력 부분을 담당하는 클래스.

ResultObj : 한 게임이 끝난 후, 게임 결과를 포함하고 있는 클래스.

[# Package : twogo]

Midlet : 기본적인 사운드 관련 정보를 포함하고 있는 클래스.


[# Package : twogo1p]

AboutCompany : 게임 문의 페이지를 보여주는 클래스.

Agent : 사용자 및 컴퓨터를 움직이는 클래스.

Eval‍uateGame : 게임 평가 페이지를 보여주는 클래스.

Gallery : 갤러리 메뉴를 표시하고 처리하는 클래스.

GameInfo : RMS에 게임 관련 정보를 넣어두고, 게임 시작할 때 가져 옴.

GameView : 맞고 1인용 게임을 보여주는 클래스.

Help : 도움말 페이지를 보여주는 클래스.

MainMenu : 메인 메뉴를 표시해주는 클래스.

Midlet : 맞고 Main Midlet 클래스.

Option : 소리 및 진동을 설정하는 옵션 페이지를 보여주는 클래스.

Room : 맞고 방에서 일어나는 모든 일을 담당하는 클래스.

SendGame : 게임 보내기 선물 페이지를 보여주는 클래스.

그리고 게임 상에서 각각의 클래스들은 다음과 같은 관계를 갖습니다.


위 그림에서 속이 빈 흰색 화살표는 포함 관계를 뜻하며, 속이 찬 검정색 화살표는 상속 관계를 뜻합니다.

먼저 메뉴와 관련된 클래스들의 경우에는, 각각 Canvas를 상속받은 클래스들이 6개 있고, MainMenu 클래스에서 해당 메뉴를 선택하면, 그에 해당하는 메뉴 클래스에 메뉴 할당을 하고 해당 화면을 보여주는 방식으로 작성될 것입니다.

게임과 관련된 클래스들의 경우, 기본적으로 Midlet 클래스에서 시작하며, 모든 디스플레이 적인 요소는 Canvas 클래스를 상속받은 GameView 클래스에서 모두 그려주는 방식으로 작성하게 될 것입니다.

그 외의 맞고 게임과 관련된 기본적인 클래스에 대해서 조금 자세히 정리를 해보면

[# Room 클래스에 구현될 함수]

public void init(Midlet midlet); // 초기화.

private void generateCards(); // 생성된 카드를 섞어주는 기능을 하는 함수.

private void distributeCards(); // 게임 시작 후, 카드를 플레이어들에게 나눠준다.

private void initTurnUp(); // 게임 초기 시작 시, 카드를 뒤집어 놓아주는 함수.

private void checkCanThrowCards(); // 낼 수 있는 카드인지 체크한다.

private boolean checkPresident(); // 플레이어의 패 중에 대통령(총통)이 있는지 체크.

private boolean checkFloorPresident(); // 바닥에 대통령(총통)이 있는지 체크.

Private boolean initUserMoney(); // 사용자 돈 초기화.

private void checkPresident(); // 사용자 돈 계산.

Private void showResult(); // 게임 결과를 보여줌.

protected void gameStarted(); // 게임 시작 함수.

void robPee(byte slot, byte robPee); // 피 뺏기.

protected void doRobPee(byte slot, byte amount); // 지정한 상대에게 피를 넘겨주기.

public byte getStockedCardatTop(); // 제일 위의 카드를 리턴.

boolean isGookJinInHand(byte slot); // 지정한 슬롯에 국진이 있는지 체크.

byte getOneOfTwoCard(boolean bWarnGodori, Boolean bWarnChungdan, boolean bWarnHongdan,boolean bWarnChodan)
// 두개의 카드중 하나의 카드를 선택할 때, 하나의 카드를 알려준다.

byte getSameCardInHand(byte slot, byte cardNum);
// 손에 동일한 카드가 몇 장있는지 리턴.

protected BCollector getHandCards(short slot); // 손에 있는 카드를 리턴.

[# GostopCard 클래스에 구현될 중요 함수]

public void init(short numAddCard2, short numAddCard3); // 초기화 함수.
private void initCardType(); // 카드 배열에 카드 타입을 초기화한다.
public byte getType(byte cardNum); // 해당 카드가 어떤 카드인지를 리턴한다.
public void addAdditionalCard(); // 추가로 쌍피를 설정할 때 사용한다.

[# GostopFloor 클래스에 구현될 중요 함수]

public void init(); // 초기화 함수.
public void initialTurnUp(byte cardnum); // 바닥에 패를 깐다.
public void addToFloor(byte cardnum); // 바닥에 빈자리를 찾아 카드를 놓는다.
public void removeFloorCard(byte cardnum); // 카드를 바닥에서 뺀다.
public void dropCard(byte cardnum); // 플레이어가 바닥에 카드를 그냥 내려 놓음.
public void matchCards(byte sourceCard, byte targetCard); // 카드를 붙여 내려놓음.
public void eatTriple(byte cardnum); // 싼 것을 먹으며 내려놓음.
public void bomb(byte card1, byte card2, byte card3, byte targetCard); // 폭탄을 내려놓음.
public void sSam(byte cardnum); // 뒤집었을때 뻑이 났을 경우,
public void turnUp(byte cardnum); // 카드를 한 장 뒤집는다.
public int checkFloorStatus(byte cardnum); // 바닥 상태를 체크한다.
public boolean getSak3(); // 싹슬이 인지 체크.



[# GostopView 클래스에 구현될 중요 함수]

public byte choiceTwocard(byte card1, byte card2); // 카드 둘 중 하나를 선택할 때,
public byte choiceGookjin(); // 국진을 선택할 때,
protected byte choiceShake(byte month); // 흔들기 여부 선택.
protected byte choiceBomb(byte month); // 폭탄 여부 선택.
protected byte choiceGostop(); // 고/스톱 선택.


물론, 앞으로 우리가 구현하게 될 함수들은 위의 함수들보다 더 많겠지만, 나름대로 중요하다고 생각되는 함수들만을 뽑아 본 것입니다.

다음 시간부터는 실제로 맞고 게임 제작에 들어가보도록 하겠습니다.

Posted by maysent
: