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 를 주고 각 함수마다 저렇게 다 조건 주고 동일하고 (배열 크기만 다르고, 그에 맞은 추가 부분)
하면 안되나요???ㅠㅠㅠ 아니면 다른 방법 조언좀해주세요
답변은 아니지만............
동작만 하면 되는거 아닌가요~_~:
음..... 저같은 경우는 귀찮아 지면 귀찮아 질수록
코드는 짧고 간결해지고 좋아지는것 같아요.