我正在尝试做一个记忆游戏,当我想把两张纸牌显示给玩家时有一个小问题。

当我运行我的记忆游戏时,发生的事情是第一张卡正确显示,但是当我单击第二张卡时,除非是一对,否则它一直朝下。

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;
                }
            }


我有延迟,因此玩家可以在翻过来之前看到两张牌。

感谢您的帮助!

最佳答案

使用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();
}

09-05 01:20