0

次のコードで repaint メソッドを使用して、ユーザー入力後に画面を更新しようとしています。このゲームは、ユーザーが 2 枚のカードをクリックして自分の絵を表示するカード ゲームです。写真が一致する場合、カードは表示されたままですが、写真が一致しない場合、カードを裏返して写真をもう一度非表示にします。

最初のカードをクリックすると表示されますが、2 番目のカードを選択すると、一致する画像が選択されている場合は両方のカードが表示されるか、2 番目の画像が表示されずに最初のカードが裏返されます。

ご協力いただきありがとうございます。

addMouseListener(new MouseAdapter(){

        public void mouseClicked(MouseEvent e) {
                int row = e.getX() / (Card.SIZE*2);
                int col = e.getY() / (Card.SIZE*3);


                                    //OPEN means the picture is visible
                if(cards[row][col].getState() == Card.CLOSED)
                    cards[row][col].setState(OPEN);

                repaint();
                compareCards(row,col);

        }
    }); 
}


public void compareCards(int row, int col){

    if(clickNum == 1){
        r1 = row;
        c1 = col;
        clickNum++;

    }
    else if(clickNum == 2){
        r2 = row;
        c2 = col;

        //The OR accounts for clicking twice on the same tile
        if(cards[r1][c1].getNum() != cards[r2][c2].getNum() || (r1 == r2 && c1 == c2)){
            cards[r1][c1].setState(CLOSED);
            cards[r2][c2].setState(CLOSED);
        }
        clickNum = 1;
    }
}
4

1 に答える 1

0

カードの比較機能がカードの状態をあまりにも早く CLOSED に設定しているため、表示されていません。使用してみてください:

public void compareCards(int 行, int 列){

try
{
  Thread.sleep(5000);//sleep for five seconds
}catch(Exception e){}

if(clickNum == 1){
    r1 = row;
    c1 = col;
    clickNum++;

}
else if(clickNum == 2){
    r2 = row;
    c2 = col;

    //The OR accounts for clicking twice on the same tile
    if(cards[r1][c1].getNum() != cards[r2][c2].getNum() || (r1 == r2 && c1 == c2)){
        cards[r1][c1].setState(CLOSED);
        cards[r2][c2].setState(CLOSED);
    }
    clickNum = 1;
}

}

これにより、両方のカードが約 5 秒間表示されてから、カードが裏返されます。また、カードをまだ持っていない場合、カードが同じ場合に裏返す処理を行うメソッドを実装する必要があります。ここでは見ないから言ってるだけ。

于 2013-05-16T23:38:40.527 に答える