現在、num
が0の場合gameDate.setCard_one(num);
に格納、num
が0以外の場合gameDate.setCard_two(num);
に格納という流れでソースコードを記載しているのですが、Eclipseのデバッグモードにて、参照画像の赤枠部分を押下した際、0の判定となりgameDate.setCard_one(num);
に格納されることを確認、次に青枠部分のどれかを押下した場合も0となっており、gameDate.setCard_one(num);
に格納されてしまいます。
以下配列で確認した際、場合だと、num
が一致しないため延々とゲームが終わらない状態になってしまいます。
java
1int[][] number = { 2 {0,1,2,3,4,5,6,7,8,9,10,11,12}, 3 {13,14,15,16,17,18,19,20,21,22,23,24,25}, 4 {26,27,28,29,30,31,32,33,34,35,36,37,38}, 5 {39,40,41,42,43,44,45,46,47,48,49,50,51} 6};
現状、いい案が思い浮かばず詰まってしまっている状態のため、
お手数ですが、良き案がございましたらご教示いただけますと幸いです。
Cardclick_Listener.java
java
1package pair_matching; 2 3import java.awt.event.MouseEvent; 4import java.awt.event.MouseListener; 5 6public class Cardclick_Listener implements MouseListener{ 7 private CardLabel card_label; 8 private GameDate gameDate; 9 10 public Cardclick_Listener(CardLabel card_label, GameDate gameDate) { 11 this.card_label = card_label; 12 this.gameDate = gameDate; 13 } 14 15 @Override 16 public void mouseClicked(MouseEvent e) { 17 boolean open = card_label.isOpen(); 18 int num = card_label.getNumber(); 19 int posi = card_label.getPosition(); 20 int CardOne = gameDate.getCard_one(); 21 int CardTwo = gameDate.getCard_two(); 22 23 // カードの表裏チェック 24 if(open == true) { 25 ; // 裏面にしない 26 }else if(open == false){ 27 card_label.setOpen(true); 28 if(posi > 0) { 29 // numが0か0以外の判定 30 if(num == 0) { 31 // 0の場合:GameDateのCard_oneに格納 32 gameDate.setCard_one(num); 33 }else{ 34 // 0以外:GameDateのCard_twoに格納 35 gameDate.setCard_two(num); 36 } 37 } 38 39 } 40 41 if(CardOne == CardTwo) { 42 ; // 一旦処理終了 43 }else if(CardOne != CardTwo){ 44 // カードを裏面に戻す 45 // gameDate.setCard_one , gameDate.setCard_twoをリセット 46 } 47 } 48 49 @Override 50 public void mousePressed(MouseEvent e) { 51 } 52 @Override 53 public void mouseReleased(MouseEvent e) { 54 } 55 @Override 56 public void mouseEntered(MouseEvent e) { 57 } 58 @Override 59 public void mouseExited(MouseEvent e) { 60 } 61 62}
GameDate.java
java
1package pair_matching; 2 3public class GameDate { 4 private int card_one; 5 private int card_two; 6 7 public int getCard_one() { 8 return card_one; 9 } 10 public void setCard_one(int card_one) { 11 this.card_one = card_one; 12 } 13 public int getCard_two() { 14 return card_two; 15 } 16 public void setCard_two(int card_two) { 17 this.card_two = card_two; 18 } 19 20}
CardLabel.java
java
1package pair_matching; 2 3import javax.swing.ImageIcon; 4import javax.swing.JLabel; 5 6public class CardLabel extends JLabel{ 7 private int number; 8 private int position; 9 private boolean open = false; 10 private ImageIcon open_icon; 11 private ImageIcon reverse_icon; 12 13 // コンストラクタの作成 14 public CardLabel(ImageIcon open_icon, ImageIcon revers_icon, int number, int position) { 15 this.open_icon = open_icon; 16 this.reverse_icon = revers_icon; 17 this.number = number; 18 this.position = position; 19 20 // 裏面のセット 21 setIcon(revers_icon); 22 } 23 24 public int getNumber() { 25 return number; 26 } 27 28 public boolean isOpen() { 29 return open; 30 } 31 32 public void setOpen(boolean open) { 33 if(open == true) { 34 this.setIcon(open_icon); 35 }else { 36 this.setIcon(reverse_icon); 37 } 38 this.open = open; 39 } 40 41 public int getPosition() { 42 return position; 43 } 44 45}
CardList.java
java
1package pair_matching; 2 3~ 中略 ~ 4 5public class CardList extends JPanel{ 6 ArrayList<CardLabel> cards = new ArrayList<>(); 7 private GameDate gameDate = new GameDate(); 8 // ラベルをリストにする -> リストの各ラベルにImageIconをセット -> リストをコレクションシャッフル 9 boolean flg = false; 10 11 final int club = 0; 12 final int diamond = 1; 13 final int heart = 2; 14 final int spade = 3; 15 16 /* カード画像 */ 17 // 裏面 18 ImageIcon card_back = new ImageIcon("image/card_back.png"); 19 // 表面 20 ImageIcon[][] card_array = new ImageIcon[4][13]; 21 String filename; 22 23 // カード位置 24 int[][] Array2 = { 25 {1,2,3,4,5,6,7,8,9,10,11,12,13}, 26 {14,15,16,17,18,19,20,21,22,23,24,25,26}, 27 {27,28,29,30,31,32,33,34,35,36,37,38,39}, 28 {40,41,42,43,44,45,46,47,48,49,50,51,52} 29 }; 30 31 // jの数値 32 int[][] number = { 33 {0,1,2,3,4,5,6,7,8,9,10,11,12}, 34 {13,14,15,16,17,18,19,20,21,22,23,24,25}, 35 {26,27,28,29,30,31,32,33,34,35,36,37,38}, 36 {39,40,41,42,43,44,45,46,47,48,49,50,51} 37 }; 38 39 public CardList() { 40 setPreferredSize(new Dimension(1150, 550)); 41 42 // Card_image 43 for(int i = 0; i < card_array.length; i++) { 44 for(int j = 0; j < card_array[i].length; j++) { 45 filename = "image/card"; 46 switch(i) { 47 case club: 48 filename = filename + "_club_"; 49 break; 50 case diamond: 51 filename = filename + "_diamond_"; 52 break; 53 case heart: 54 filename = filename + "_heart_"; 55 break; 56 case spade: 57 filename = filename + "_spade_"; 58 break; 59 } 60 // ファイル名に数字を足す -> 拡張子を足す 61 filename = String.format(filename + "%02d", j+1); 62 filename = filename + ".png"; 63 card_array[i][j] = new ImageIcon(filename); 64 CardLabel tmp_label = new CardLabel(card_array[i][j],card_back,number[i][j],Array2[i][j]); 65 // tmp_labelを押下したら、ひっくり返るのはtmp_label 66 tmp_label.addMouseListener(new Cardclick_Listener(tmp_label, gameDate)); 67 add(tmp_label); 68 cards.add(tmp_label); 69 } 70 } 71 Collections.shuffle(cards); 72 73 } 74 75}
回答1件
あなたの回答
tips
プレビュー