프로그래밍/안드로이드
안드로이드 : CardMatchGame
김마농
2012. 3. 27. 22:09
public class Card {
public static final int CARD_SHOW=0;
public static final int CARD_CLOSE=1;
public static final int CARD_PLAYEROPEN=2;
public static final int CARD_MATCHED=3;
public int m_state;
public static final int IMG_RED=1;
public static final int IMG_GREEN=2;
public static final int IMG_BLUE=3;
public int m_Color;
public Card(int _Color){
m_state=CARD_SHOW;
m_Color= _Color;
}
}
import android.app.Activity;
import android.os.Bundle;
public class CardCard extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CardKingView(this));
}
}
public class CardKingThread extends Thread {
CardKingView m_View;
CardKingThread(CardKingView _View){
m_View= _View;
}
public void run(){
while(true){
m_View.checkMatch();
}
}
}
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.View;
public class CardKingView extends View {
public static final int STATE_READY=0;
public static final int STATE_GAME=1;
public static final int STATE_END=2;
private int m_state = STATE_READY;
Bitmap m_BackGroundImage;
Bitmap m_Card_BackSide;
Bitmap m_Card_Red;
Bitmap m_Card_Blue;
Bitmap m_Card_Green;
Card m_Shuffle[][];
private Card m_SelectCard_1 = null;
private Card m_SelectCard_2 = null;
public CardKingView(Context context) {
super(context);
m_BackGroundImage = BitmapFactory.decodeResource(getResources(),R.drawable.background,null);
m_Card_BackSide = BitmapFactory.decodeResource(getResources(), R.drawable.backside,null);
m_Card_Red = BitmapFactory.decodeResource(getResources(), R.drawable.front_red,null);
m_Card_Green = BitmapFactory.decodeResource(getResources(), R.drawable.front_green,null);
m_Card_Blue = BitmapFactory.decodeResource(getResources(), R.drawable.front_blue,null);
m_Shuffle = new Card[3][2];
SetCardShuffle();
CardKingThread _thread = new CardKingThread(this);
_thread.start();
}
public void onDraw(Canvas canvas)
{
canvas.drawBitmap(m_BackGroundImage, 0,0,null);
for(int y=0; y<2; y++){
for(int x=0; x<3; x++)
if(m_Shuffle[x][y].m_state==Card.CARD_SHOW || m_Shuffle[x][y].m_state==Card.CARD_PLAYEROPEN||
m_Shuffle[x][y].m_state==Card.CARD_MATCHED){
if(m_Shuffle[x][y].m_Color ==Card.IMG_RED)
canvas.drawBitmap(m_Card_Red, 60+x*120, 280+y*170,null);
else if(m_Shuffle[x][y].m_Color ==Card.IMG_GREEN)
canvas.drawBitmap(m_Card_Green, 60+x*120, 280+y*170,null);
else if(m_Shuffle[x][y].m_Color ==Card.IMG_BLUE)
canvas.drawBitmap(m_Card_Blue, 60+x*120, 280+y*170,null);
}
else
canvas.drawBitmap(m_Card_BackSide, 60+x*120, 280+y*170,null);
}
}
public void SetCardShuffle(){
m_Shuffle[0][0] = new Card(Card.IMG_RED);
m_Shuffle[0][1] = new Card(Card.IMG_BLUE);
m_Shuffle[1][0] = new Card(Card.IMG_GREEN);
m_Shuffle[1][1] = new Card(Card.IMG_GREEN);
m_Shuffle[2][0] = new Card(Card.IMG_BLUE);
m_Shuffle[2][1] = new Card(Card.IMG_RED);
}
public boolean onTouchEvent(MotionEvent event)
{
if(m_state==STATE_READY)
{
startGame();
m_state=STATE_GAME;
}
else if(m_state==STATE_GAME){
if(m_SelectCard_1 != null && m_SelectCard_2 !=null)
return true;
int px=(int)event.getX();
int py=(int)event.getY();
for(int y=0; y<2; y++){
for(int x=0; x<3; x++){
Rect box_card = new Rect(60+x*120, 280+y*170,60+x*120+80, 280+y*170+115);
if(box_card.contains(px,py))
if(m_Shuffle[x][y].m_state != Card.CARD_MATCHED)
if(m_SelectCard_1 ==null){
m_SelectCard_1=m_Shuffle[x][y];
m_SelectCard_1.m_state=Card.CARD_PLAYEROPEN;
}
else{
if(m_SelectCard_1 != m_Shuffle[x][y]){
m_SelectCard_2 = m_Shuffle[x][y];
m_SelectCard_2.m_state = Card.CARD_PLAYEROPEN;
}
}
}
}
}else if(m_state==STATE_END){
m_state=STATE_READY;
}
invalidate();
return true;
}
public void startGame(){
m_Shuffle[0][0].m_state=Card.CARD_CLOSE;
m_Shuffle[0][1].m_state=Card.CARD_CLOSE;
m_Shuffle[1][0].m_state=Card.CARD_CLOSE;
m_Shuffle[1][1].m_state=Card.CARD_CLOSE;
m_Shuffle[2][0].m_state=Card.CARD_CLOSE;
m_Shuffle[2][1].m_state=Card.CARD_CLOSE;
invalidate();
}
public void checkMatch(){
if(m_SelectCard_1 == null || m_SelectCard_2 ==null)
return;
if(m_SelectCard_1.m_Color==m_SelectCard_2.m_Color){
m_SelectCard_1.m_state=Card.CARD_MATCHED;
m_SelectCard_2.m_state=Card.CARD_MATCHED;
m_SelectCard_1=null;
m_SelectCard_2=null;
}else{
try{
Thread.sleep(500);
}catch(InterruptedException e){
}
m_SelectCard_1.m_state=Card.CARD_CLOSE;
m_SelectCard_2.m_state=Card.CARD_CLOSE;
m_SelectCard_1=null;
m_SelectCard_2=null;
}
postInvalidate();
}
}
<구현완료>
구현은 완료되었지만 아직 교재 그대로 보고 코딩한 수준이기에 소스를 완벽히 다 이해하지 못했다. 몇번 계속 짝맞추기 게임을 만들면서 소스를 이해해야겠다.