public class CardGameView extends View {

 public static int count = 1;
 public static int stage_2_count;
 
 private Bitmap m_Card_1;
 private Bitmap m_Card_2;
 private Bitmap m_Card_3;
 
 
 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; // 珥덇린媛믪� 以�퉬�곹깭

 private Bitmap m_BackGroundImage; // 諛곌꼍�대�吏�
 private Bitmap m_Card_Backside; // 移대뱶�룸㈃
 
 private Bitmap m_Card_Red;
 private Bitmap m_Card_Blue;
 private Bitmap m_Card_Green;
 
 private Card m_Shuffle[][];
 
 private Card m_SelectCard_1 = null; // 泥ル쾲吏몃줈 �좏깮��移대뱶
 private Card m_SelectCard_2 = null; // �먮쾲吏몃줈 �좏깮��移대뱶
 
 int cardTouchSound;
 MediaPlayer BGSound;
 
 SoundPool sp =  new SoundPool(5, AudioManager.STREAM_MUSIC,0);
 
  public CardGameView(Context context) {
  super(context);
  
  
  if(count == 1){
  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);
  m_Card_Blue = BitmapFactory.decodeResource(getResources(),R.drawable.front_blue);
  m_Card_Green = BitmapFactory.decodeResource(getResources(),R.drawable.front_green);
  
  m_Shuffle = new Card[3][2];
  
  BGSound = MediaPlayer.create(context, R.raw.song);
  BGSound.setLooping(true);
  cardTouchSound = sp.load(getContext(), R.raw.card_touch_mp3,1);
  SetCardShuffle();
  
  CardGameThread _thread = new CardGameThread(this);
  _thread.start();
  BGSound.start();
  }
  
  else if(stage_2_count == 3)
  {
   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);
   m_Card_Blue = BitmapFactory.decodeResource(getResources(),R.drawable.front_blue);
   m_Card_Green = BitmapFactory.decodeResource(getResources(),R.drawable.front_green);
   m_Card_1 = BitmapFactory.decodeResource(getResources(),R.drawable.front_1);
   m_Card_2 = BitmapFactory.decodeResource(getResources(),R.drawable.front_2);
   m_Card_3 = BitmapFactory.decodeResource(getResources(),R.drawable.front_3);
   
   m_Shuffle = new Card[4][3];
   
   BGSound = MediaPlayer.create(context, R.raw.song);
   BGSound.setLooping(true);
   cardTouchSound = sp.load(getContext(), R.raw.card_touch_mp3,1);
   SetCardShuffle();
   
   CardGameThread _thread = new CardGameThread(this);
   _thread.start();
   BGSound.start();
   
  }
 
 }
 
 @Override
 public void onDraw(Canvas canvas) {
  canvas.drawBitmap(m_BackGroundImage, 0,0,null); 
  
  if( count == 1){
  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, 100 + x*100, 230 + y*130,null);
    else if(m_Shuffle[x][y].m_Color == Card.IMG_GREEN)
     canvas.drawBitmap(m_Card_Green,  100 + x*100, 230 + y*130,null);
    else if(m_Shuffle[x][y].m_Color == Card.IMG_BLUE)
     canvas.drawBitmap(m_Card_Blue,  100 + x*100, 230 + y*130,null);
   }
   else
    canvas.drawBitmap(m_Card_Backside,  100 + x*100, 230 + y*130,null);   
  }
  }
  
  else if(stage_2_count == 3)
  {
   for(int y = 0; y< 3; y++){
    for(int x =0; x<4; 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,  50 + x*100, 230 + y*130,null);
     else if(m_Shuffle[x][y].m_Color == Card.IMG_GREEN)
      canvas.drawBitmap(m_Card_Green,  50 + x*100, 230 + y*130,null);
     else if(m_Shuffle[x][y].m_Color == Card.IMG_BLUE)
      canvas.drawBitmap(m_Card_Blue,   50 + x*100, 230 + y*130,null);
     else if(m_Shuffle[x][y].m_Color == Card.IMG_1)
      canvas.drawBitmap(m_Card_1,   50 + x*100, 230 + y*130,null);
     else if(m_Shuffle[x][y].m_Color == Card.IMG_2)
      canvas.drawBitmap(m_Card_2,   50 + x*100, 230 + y*130,null);
     else if(m_Shuffle[x][y].m_Color == Card.IMG_3)
      canvas.drawBitmap(m_Card_3,   50 + x*100, 230 + y*130,null);
    }
    else
     canvas.drawBitmap(m_Card_Backside,  50 + x*100, 230 + y*130,null);
   }
   
  }
 }
 
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  sp.play(cardTouchSound, 1, 1, 0, 0, 1);
 
  if( count == 1){
  if(m_state == STATE_READY){
         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(100 + x*100, 230 + y*130, 100 + x*100+80, 230 + y*130+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;
  }
  }
  
  
  else if(stage_2_count == 3)
  {
   
   if(m_state == STATE_READY){
       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< 3; y++){
     for(int x =0 ; x<4;x++){
      
      Rect box_card = new Rect(50 + x*100, 230 + y*130, 50 + x*100+80, 230 + y*130+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(){
 
  if(count == 1){
  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();
  }
  else if(stage_2_count == 3)
  {
   m_Shuffle[0][0].m_state = Card.CARD_CLOSE;
   m_Shuffle[0][1].m_state = Card.CARD_CLOSE;
   m_Shuffle[0][2].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[1][2].m_state = Card.CARD_CLOSE;
   m_Shuffle[2][0].m_state = Card.CARD_CLOSE;
   m_Shuffle[2][1].m_state = Card.CARD_CLOSE;
   m_Shuffle[2][2].m_state = Card.CARD_CLOSE;
   m_Shuffle[3][0].m_state = Card.CARD_CLOSE;
   m_Shuffle[3][1].m_state = Card.CARD_CLOSE;
   m_Shuffle[3][2].m_state = Card.CARD_CLOSE;
   
   invalidate();
  }  
 }
  
  
 }
 public void SetCardShuffle(){
  
  if( count == 1) {
  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);


    }
  
  else if( stage_2_count == 3)
  {
   m_Shuffle[0][0]= new Card(Card.IMG_RED);
   m_Shuffle[0][1]= new Card(Card.IMG_BLUE);
   m_Shuffle[0][2]= new Card(Card.IMG_GREEN);
   m_Shuffle[1][0]= new Card(Card.IMG_1);
   m_Shuffle[1][1]= new Card(Card.IMG_2);
   m_Shuffle[1][2]= new Card(Card.IMG_3);
   m_Shuffle[2][0]= new Card(Card.IMG_3);
   m_Shuffle[2][1]= new Card(Card.IMG_2);
   m_Shuffle[2][2]= new Card(Card.IMG_1);
   m_Shuffle[3][0]= new Card(Card.IMG_GREEN);
   m_Shuffle[3][1]= new Card(Card.IMG_BLUE);
   m_Shuffle[3][2]= new Card(Card.IMG_RED);
   }
  
 }

 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;
   
   /////////////////          이 부분 없애면 2*3 으로는 잘 돌아가요//////////////////////////////////
   stage_2_count++;
  if (stage_2_count == 3) {  
    count = 0;
 
    m_state = STATE_READY;
    startGame();                                             ////////////////// 3*4 로 카드를 뒤집은 상태로 만들기  
  }
//////////////////////////   //////////////////////////////////////////////////////////////////////////////////////////////////////

안 없애고 돌리면 (0,0) 사진만 뒤집혀지고 (0,1),(0,2) 카드는 앞면  나머지는 안뜨고 sorry 메세지와 함께 닫혀요  

/////////////////////////////////////////// 
  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();
 }
 }
}

 

그냥  스테이지 하나를 추가 하기 위해서 노가다로 했어요....

 스테이트 패턴 하기전에 노가다로 하나의 스테이지를 추가해보고 싶어서요

 

저렇게 노가다로 stage_2_count 를 주고 각 함수마다 저렇게 다 조건 주고 동일하고 (배열 크기만 다르고, 그에 맞은 추가 부분)

하면 안되나요???ㅠㅠㅠ 아니면 다른 방법 조언좀해주세요