책보고 카드 뒤집기 따라 하고 있는데요 ..
5초동안 앞면 보여주고 다시 뒷면 보여주는게 안되네요..
코드는 간추려서 ...
public CardGameView(Context context) {
super(context);
m_BackGroundImage = BitmapFactory.decodeResource(getResources(),
R.drawable.background);
m_Card_Backside = BitmapFactory.decodeResource(getResources(),
R.drawable.backside);
// 카드 정보 얻기
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);
// 화면에 표시할 카드만큼 할당 받음(2x3)
m_Shuffle = new Card[2][3];
// 카드 섞기
SetCardShuffle();
// 짝맞추기 검사 스레드 실행
CardGameThread thread = new CardGameThread(this);
thread.start();
}
!! onDraw :
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 배경 이미지
canvas.drawBitmap(m_BackGroundImage, 0, 0, null);
// 카드 그려주기
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 3; y++) {
// 카드의 앞면을 그려야 하는 경우
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, 35 + y * 225,
335 + x * 350, null);
} else if (m_Shuffle[x][y].m_Color == Card.IMG_BLUE) {
canvas.drawBitmap(m_Card_Blue, 35 + y * 225,
335 + x * 350, null);
} else {
canvas.drawBitmap(m_Card_Green, 35 + y * 225,
335 + x * 350, null);
}
} else {
// 카드 뒷면을 그려야 하는 경우
canvas.drawBitmap(m_Card_Backside, 35 + y * 225,
335 + x * 350, null);
}
}
} // for()
} // end of onDraw
// 터치 이벤트
@Override
public boolean onTouchEvent(MotionEvent event) {
// 게임 준비중
if (m_state == STATE_READY) {
startGame();
// 이부분에서 카드 상태를 Show로 하고 invalidate() 부르고 5초 sleep 했는데.. 그럼 onDraw에서 앞면으로 다시 셋팅하고
// 5초 있다가 Close 상태로 셋팅하고 다시 invalidate() 불러서 뒷면으로 표시하면 될 것 같았는데 앞면이 안나오네요.
// 구조상의 문제인가요? 코드에 문제가 있나요 ...
}
// 게임중
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 x = 0; x < 2; x++) {
for (int y = 0; y < 3; y++) {
// 각 카드들의 박스 값을 생성
Rect box_card = new Rect(35 + y * 225, 335 + x * 350,
35 + y * 225 + 180, 335 + x * 350 + 258);
if (box_card.contains(px, py)) {
// (x, y)에 위치한 카드가 선택 되었습니다.
// 맞춘카드는 패스
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;
}
}
}
}
}// for
}// for
} // elseif
// 게임 종료
else if (m_state == STATE_END) {
// 게임 준비상태로 변경
m_state = STATE_READY;
}
invalidate();
return true;
}
// !!!!! Method들
public void startGame() {
// 잠시 보요주고
m_Shuffle[0][0].m_state = Card.CARD_SHOW;
m_Shuffle[0][1].m_state = Card.CARD_SHOW;
m_Shuffle[0][2].m_state = Card.CARD_SHOW;
m_Shuffle[1][0].m_state = Card.CARD_SHOW;
m_Shuffle[1][1].m_state = Card.CARD_SHOW;
m_Shuffle[1][2].m_state = Card.CARD_SHOW;
invalidate();
try {
Thread.sleep(5000);
Log.d("MyLog", "stats: " + m_Shuffle[0][0].m_state);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 가리기
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;
Log.d("MyLog", "stats: " + m_Shuffle[0][0].m_state);
m_state = STATE_GAME;
invalidate();
}
---------------------------------
startGame() 부분에서 뭔가 구현하고 싶은데 뭐가 문제일까요...