2016-10-22 60 views
0

我想要做一個記憶遊戲,並有一個輕微的問題,當我想要將兩張牌向玩家顯示。內存中的第二張牌不會打開面朝上

當我運行我的記憶遊戲時發生的事情是,第一張牌顯示正確,但是當我點擊第二張牌時,它會一直朝下,除非它是一對。

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

相關問題