Android

[안드로이드] 안드로이드스튜디오(Android Studio) 고스톱 게임 만들어 보기 제 2탄 게임만들기 예제, 안드로이드 예제, 안드로이드 강좌

정보처리마법사 2016. 10. 10. 23:51
반응형

 

 

[안드로이드] 안드로이드스튜디오(Android Studio) 고스톱 게임 만들어 보기 제 2탄 게임만들기 예제, 안드로이드 예제, 안드로이드 강좌

 

 

 

 

고스톱 게임 만들어 보기 제 2탄

 

안녕하세요 정보처리마법사 입니다.

 

이번 포스팅의 주제는 고스톱 게임 만들기에 관한 내용 제 2탄 입니다.

1탄의 내용을 보고 오신 분도 계실테고 그냥 바로 2탄으로 오신 분도 있으시겠지만 별로 상관은 없습니다. 물론 정주행이 좋긴 좋지만요. 제 2탄에서는 고스톱 카드의 위치 설정에 관한 내용입니다.

제 1탄에서 화면을 대충 구성했으므로 고스톱 이미지를 정해진 화면의 각 위치에 나열해보겠습니다. 고스톱게임음 내 카드와 상대의 카드가 10장씩 나란히 놓여있고, 가운데 카드 묶음이 있고, 바닥에 여러 장의 카드가 동일한 카드의 월별로 놓여있는 형태를 갖습니다. 이러한 화면의 형태와 위치를 관리하기 위한 프로젝트를 만들어보겠습니다.

 

고스톱 카드의 위치 설정 프로젝트의 클래스 구조입니다.

고스톱과 같은 보드 게임은 정해진 카드의 위치를 갖고 있습니다. 따라서 이러한 위치를 관리해 자동으로 처리하기 위한 클래스를 별도로 관리하는 것이 편리합니다.

 

 

 

고스톱에서 구성할 수 있는 카드의 위치를 표현한 예상 이미지 입니다.

프로젝트에서 사용할 고스톱 이미지를 /res/drawable 폴더에 복사를 합니다.

이미지는 참고서적인 나홀로 개발자를 위한 안드로이드 게임 프로그래밍 (이병옥 지음 ) (에이콘) 의 저작권이 있을 수 있으므로 첨부파일로 첨부하지는 않겠습니다. 저는 서적을 구입하였기 때문에 이 이미지를 사용해서 예제를 진행해 나가겠습니다.아래 이미지는 파일명이 이렇다는 것을 보여드리기 위한 이미지 입니다.

그냥 그림판으로 너비 61픽셀 높이 90픽셀 크기의 카드에 대충 그리던지 아니면 1피, 1광, 1홍단 이런식으로 텍스트로 하셔도 될 듯 합니다.

참고서적의 경우엔 각 기능별로 프로젝트를 따로 생성하여 설명을 하고 있지만 저는 그냥 한 프로젝트에 계속 기능을 추가해서 포스팅 하는 방식으로 진행하겠습니다.

 

카드는 고스톱에서 사용하는 48개의 이미지와 뒤집힌 카드, 폭탄일 경우 선택할 카드를 포함해 총 50장으로 구성이 됩니다. 경우에 따라 카드의 크기는 클릭해야 할 필요가 있는 경우 좀 더 크게 표시하거나 작게 표시할 수 있습니다.  ScreenConfig 클래스는 실제 위치와 가상 위치 정보를 비교해 좌표를 제공하는 역할을 합니다.

제 1탄엔 이런모습으로 테스트를 했지만 이제 좀 더 그럴듯하게 수정해보겠습니다.

 

각 멤버변수의 주석을 살펴보면 어떤 종류의 위치를 사용하는지 알 수 있습니다. 이러한 설정은 초기 설정 시 파라미터로 계산합니다. MainView의 init함수에서의 호출은 다음과 같습니다.

mScreenConfig = new ScreenConfig(width, height, 2000, 1000);

이때의 파라미터인 2000, 1000 크기를 기준으로 ScreenConfig 클래스는 다음과 같이 구현되어 위치를 관리합니다.

48장의 고스톱이미지와 뒤집힌카드이미지, 폭탄 이미지 까지 총 50장의 이미지가 res/drawable 에 저장이 되어있습니다. 이러한 이미지를 쉽게 가져와 사용할 수 있는 방법이 필요합니다.

이 카드들을 체계적으로 관리하기 위해 CardInfo 클래스를 만듭니다.

이를 관리하기 위해 mCard 배열을 CardInfo 클래스 내에 정의해서 사용합니다.

public int[][] mCard = new int[51][4]

2차원 배열로, 카드의 수와 구분 값으로 구성됩니다. 우선 각 이미지를 배열로 관리하기 위해 두 번째 인덱스를 다음과 같은 값으로 구분합니다.

C_PIC 은 이미지,

C_KING 는 광, 열끗, 띠, 피

C_MONTH 는 1~12월까지 카드의 월

C_JUM_1 은 피의 점수(일반피, 쌍피)

2차원 배열의 첫 번째 인덱스 값이 0이라면 뒤집힌 카드 이며

1~48까지가 카드 게임에 사용되는 카드를 나타냅니다.

mCard[1차 인덱스][C_PIC] 는 이미지를 나타냅니다.

         mCard[0][C_PIC]=R.drawable.c00_0; // 뒤집힌 카드 이미지

  mCard[1][C_PIC]=R.drawable.c01_1; // 1자 광 이미지

     mCard[2][C_PIC]=R.drawable.c01_2; // 1자 홍단 이미지

  mCard[3][C_PIC]=R.drawable.c01_3; // 1자 피 이미지

  mCard[4][C_PIC]=R.drawable.c01_4; // 1자 피 이미지

      mCard[5][C_PIC]=R.drawable.c02_1; // 2자 10점 이미지

mCard[6][C_PIC]=R.drawable.c02_2; // 2자 홍단 이미지

   mCard[7][C_PIC]=R.drawable.c02_3; // 2자 피 이미지

   mCard[8][C_PIC]=R.drawable.c02_4; // 2자 피 이미지

   mCard[9][C_PIC]=R.drawable.c03_1; // 3자 광 이미지

.

.

.

mCard[1차 인덱스][C_KIND]는 카드의 점수를 의미합니다. 광(20), 열끗(10), 띠(5), 피(1) 인지 구분하기 위해 두 번째 배열 값을 C_KIND로 설정해 구성합니다.

               mCard[0][C_KIND]=0; //뒤집힌 카드 이미지

mCard[1][C_KIND]=20; //1자 광

        mCard[2][C_KIND]=10; //1자 띠(홍단)

mCard[3][C_KIND]=5; //1자 피

mCard[4][C_KIND]=1; //1자 피

  mCard[5][C_KIND]=10; //2자 10

         mCard[6][C_KIND]=5; //2자 띠(홍단)

mCard[7][C_KIND]=1; //2자 피

mCard[8][C_KIND]=1; //2자 피

  mCard[9][C_KIND]=20; //3자 광

.

.

mCard[1차 인덱스][C_MONTH] 는 카드의 월을 나타냅니다.

mCard[0][C_MONTH] = 0; //뒤집힌 카드

mCard[1][C_MONTH] = 1; //1월

mCard[2][C_MONTH] = 1; //1월

mCard[3][C_MONTH] = 1; //1월

mCard[4][C_MONTH] = 1; //1월

mCard[5][C_MONTH] = 2; //2월

mCard[6][C_MONTH] = 2; //2월

mCard[7][C_MONTH] = 2; //2월

mCard[8][C_MONTH] = 2; //2월

mCard[9][C_MONTH] = 3; //3월

.

.

.

mCard[1차인덱스][C_JUM_1]은 쌍피를 별도로 설정한 배열입니다. 이 중에서 9월, 11월, 12월의 경우 쌍피가 있는데 이들은 2점을 갖습니다.

 

여기까지가 ScreenConfig 클래스의 내용이었습니다.

 

다시 한 번 말씀 드리지만,

게임이 모두 완성이 된 포스팅이 나온 후 따라하시는 게 정신 건강에 좋을 듯 합니다.

 

제 3 탄 에서 계속하겠습니다.


 

이상으로 포스팅을 마칩니다. 감사합니다.


 


 




 

참고서적 : 나홀로 개발자를 위한 안드로이드 게임 프로그래밍 [ 이병옥 지음 ] [ 에이콘 ]






Fin.


잘 못 된 정보가 있으면 말씀해주세요~


공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.


 

 

 

 

반응형