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(); } }
<구현완료>
구현은 완료되었지만 아직 교재 그대로 보고 코딩한 수준이기에 소스를 완벽히 다 이해하지 못했다. 몇번 계속 짝맞추기 게임을 만들면서 소스를 이해해야겠다.