当前位置: 首页 > 知识库问答 >
问题:

蛇和梯子-在电脑转动和骰子滚动上增加延迟

彭阳朔
2023-03-14

我在创造游戏蛇和梯子。我使用一个游戏模式,允许你对着电脑玩。

您建议使用什么来创建此延迟?

public void rollTheDiceAndMove() {
    int diceRoll = gameBoard.rollDice();
    // delay for dice roll.

    new Timer().schedule(
        new TimerTask() {
            @Override
            public void run() {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        ////////////////////////////////////////////////////////////////////////////

                        gameGUI.indicateDiceRoll(diceRoll);
                        int newIndex = getPlayerIndexAfterRoll(diceRoll);
                        move(newIndex);
                        System.out.println("change turns");
                        swapTurns();
                        System.out.println(isComputerTurn());
                        gameGUI.updateCurrentTurnLabel();


                        if (newIndex == GameBoard.WIN_POINT) {
                            boolean restartGame = gameBoard.playAgainOrExit();

                            if (restartGame) {
                                Player winner = gameBoard.getCurrentPlayer();
                                gameGUI.updateScore(winner);
                                gameGUI.playAgain();
                            } else {
                                System.exit(0);
                            }
                        }

                        ////////////////////////////////////////////////////////////////////////////
                    }
                });
            }
        }, GameBoard.DICE_ROLL_DELAY
    );

    // try to recursively call this method again for computer turn.
}


public void move(int currentIndex) {
    int[] newCoordinates = gameBoard.getBoardCoordinates(GameBoard.NUMBER_OF_TILES - currentIndex);

    gameBoard.getCurrentPlayer().getPlayerPiece().setPosition(currentIndex);
    gameGUI.movePieceImages(newCoordinates[0], newCoordinates[1]);

    if (gameBoard.getTile(currentIndex).containsLadderOrSnake()) {
        // delay for moving to second tile.

        new Timer().schedule(
            new TimerTask() {
                @Override
                public void run() {
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {

                            int updatedIndex = gameBoard.getUpdatedPosition(currentIndex);
                            move(updatedIndex);


                        }
                    });
                }
            }, GameBoard.SECOND_MOVE_DELAY *2
        );

        return;             // we need to return 'cause of recursion. Swap turns will be executed twice, one time for the initial call and the other time on above line.
    }
}

共有1个答案

蒋栋
2023-03-14

创建项目的副本,并尝试使用PauseTransition

public void rollTheDiceAndMove() 
{
    int diceRoll = gameBoard.rollDice();
    System.out.println("Player: rolling the dice");

    PauseTransition pause = new PauseTransition(Duration.seconds(1));
    pause.setOnFinished(event ->{
        System.out.println("1 second after rolling the dice");
        gameGUI.indicateDiceRoll(diceRoll);
        int newIndex = getPlayerIndexAfterRoll(diceRoll);
        playerMove(newIndex);
        if(checkWin(Player))
        {
            System.out.println("Player won!");                
        }
        else
        {
            System.out.println("change turns");
            swapTurns();
            System.out.println(isComputerTurn());
            gameGUI.updateCurrentTurnLabel();
            computerRollDiceAndMove();
        }






    });
    pause.play();
}
public void computerRollDiceAndMove()
{
    int diceRoll = gameBoard.rollDice();
    System.out.println("Computer: rolling the dice");

    PauseTransition pause = new PauseTransition(Duration.seconds(1));
    pause.setOnFinished(event ->{
        System.out.println("1 second after rolling the dice");
        gameGUI.indicateDiceRoll(diceRoll);
        int newIndex = getComputerIndexAfterRoll(diceRoll);
        computerMove(newIndex);
        if(checkWin(computer))
        {
            System.out.println("Computer won!");
        }
        else{
            System.out.println(isComputerTurn());
            gameGUI.updateCurrentTurnLabel();
        }
    });
    pause.play();   
}
 类似资料:
  • 我正试图用python做一个掷骰子程序,给定用户在边、骰子和掷骰子上的输入来掷骰子。目前这段代码或多或少是有效的,但是我遇到的问题是,假设我让< code>3个骰子滚动< code>3次,骰子有< code>6个面。 我的代码显示如下: 当我需要它显示为: 这是我目前为止的代码。我的猜测是,它与我的参数和参数为空有关?我不完全确定。以下是我的代码:

  • 问题内容: 我正在尝试编写一个rollDice(int number,int nSides)方法,该方法返回滚动带有nSides边的数字骰子的总结果。 因此,例如rollDice(3,6)应该返回滚动3个六边骰子的结果(加上3到18之间的数字)。 当我输入1 来解决此问题时,下面的方法返回负数? 问题答案: 你只需要初始化和各一次,所以我已经从循环中去除它们。nextInt(int)方法选择一个从

  • 我正在制作一个骰子滚动工具,用户可以调整骰子的边数和骰子滚动的次数。 为此,我让用户在单元格B2中指示骰子的边数,以及在B3中掷骰子的骰子数。 那我用 在E列中创建一系列与掷出的骰子数相等的数字。在我用的这个栏目旁边 以获得随机数的选择。 这很管用。但是,我想知道是否有人能告诉我如何使用Array公式完成同样的任务。 当我尝试将ARRAYFORMULA应用于公式时,我只得到一列相同的数字。 我的任

  • 问题内容: 我有一个利用Laravel和Angular的微型网站。这是一个具有响应能力的一页微型网站,分为5个部分。我想延迟加载它们以减少一次加载。 我希望在页面加载时加载1和2,然后在您向下滚动页面时加载带有很好的淡入度的另一个视图,然后加载其交互项。 问题答案: 在这种情况下,可能没有必要(或没有效率)延迟加载控制器,但是可以做到这一点。 这里有很多事情要解决,所以我将分节处理。 现场演示在这

  • 问题内容: 我有一个div“框”,当用户滚动到下一页时,它会逐渐使用“ .fp-viewing”作为锚点淡入淡出以开始过渡效果。问题是,当触发.fp- viewing时,页面开始滚动,并且在动画结束之前将框滚动出视图。 触发.fp-viewing时,如何延迟滚动开始,直到box在4s内完成动画播放? 问题答案: 您可以使用fullpage.js提供的选项来取消运动。

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd