2016-10-22 2 views
0

私はメモリ・ゲームをしようとしていて、2枚のカードをプレイヤー用に表示させたいときには少し問題があります。メモリ内に2枚目のカードが表向きにならない

メモリゲームを実行すると、最初のカードが正しく表示されますが、2番目のカードをクリックすると、それがペアでない限り、フェイスダウンされ続けます。

if (model.getCard(tile.getNr()).getCardState() == CardState.DOWN) { 
       model.getCard(tile.getNr()).setCardState(CardState.UP); 
       tile.setImg(model.getCard(tile.getNr()).getValue()); //sets the correct image onto the card 
       click--; 
       //test if equal 
       if (click == 0) { 
        for (Cards card1 : cards) { 
         if (card1.getCardState() == CardState.UP) { 
          if (tile.getNr() != cards.indexOf(card1)) { 
           if (model.getCard(tile.getNr()).getValue() == card1.getValue()) { 
            //if both cards are equal, set them both to paired 
            model.getCard(tile.getNr()).setCardState(CardState.PAIRED); 
            model.getCard(cards.indexOf(card1)).setCardState(CardState.PAIRED); 
            click = 2; 
           } 
          } 
         } 
        } 

        try { 
         Thread.sleep(500);     //1000 milliseconds is one second. 
        } catch (InterruptedException ex) { 
         Thread.currentThread().interrupt(); 
        } 
        for (Cards card1 : cards) { 
         if (card1.getCardState() != CardState.PAIRED && card1.getCardState() == CardState.UP) { 
          model.getCard(cards.indexOf(card1)).setCardState(CardState.DOWN); 
          tiles.get(cards.indexOf(card1)).setCardDown(); 
         } 
        } 
        click = 2; 
       } 
      } 

私は遅延があり、プレイヤーは両カードを裏返す前に見ることができます。

ありがとうございます!

答えて

1

Thread.sleep(500);を使用すると、UIの更新を妨げるアプリケーションスレッドをブロックします。アプリケーションのスレッドが継続できるような方法で待つ必要があります。 PauseTransitionを使用してください。

if (click == 0) { 
    ... turn card face up ... 

    PauseTransition transition = new PauseTransition(Duration.millis(500)); 
    transition.setOnFinished(evt -> { 
     ... turn cards face down ... 
    }); 
    transition.play(); 
} 
+0

ありがとう!これは私の問題を解決しました! – ZeppRock

関連する問題