2016-10-22 57 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

相关问题