在Android应用程序中实现时间延迟

时间:2018-06-12 08:19:57

标签: java android

下面是一段代码,点击播放器将通过放置X计数器进行移动,然后计算机将通过放置O计数器进行移动。该 目前只有这个代码的问题是,当玩家放置他们的X计数器时,O计数器也会同时放置。所以它看起来都是玩家 并且计算机同时进行了移动,并且每当玩家移动时就会发生这种情况。

我想问的是,是否有可能包括2秒的时间延迟以便玩家放置他们的X然后在2秒后计算机将放置他们的O?

提前致谢

   @Override
    public void onClick(View v) {

        if (!((Button) v).getText().toString().equals("")) {
            return;
        }

        if (playerOneMove) {
            ((Button) v).setText("X");
            ((Button) v).setTextColor(playerX);
            computerMove();
        }
}

private void computerMove() {
    String[][] field = new String[3][3];
    Random random = new Random(); //you may want to declare this as a class field
    List<Button> emptyButtons = new ArrayList<>();

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            field[i][j] = buttons[i][j].getText().toString();
            if (field[i][j].equals("")) {
                emptyButtons.add(buttons[i][j]);
            }
        }
    }

    Button selectButton;

    for (int i = 0; i < 3; i++) {
        if (field[i][0].equals(field[i][1])
                && field[i][2].equals("")){
            //prevent win/win on rows by selecting the correct button here
        }
        else if (field[i][0].equals(field[i][2])
                && field[i][1].equals("")){
             //prevent win/win on rows by selecting the correct button here
        }
        else if (field[i][1].equals(field[i][2])
                && field[i][0].equals("")){
            //prevent win/win on rows by selecting the correct button here
        }
        else {
            selectButton = emptyButtons.get(random.nextInt(emptyButtons.size()));
        }

    selectButton.setText("O");
    selectButton.setTextColor(playerO);
}

3 个答案:

答案 0 :(得分:2)

您可以将计算机逻辑放在处理程序或计时器任务中:How to call a method after a delay in Android

但是你还需要一些标志,这会阻止用户在等待计算机移动时放置X.

答案 1 :(得分:2)

我编辑你的onclick有延迟,我想你需要某种阻止用户的旗帜直到电脑移动!

{{1}}

我觉得最好在1秒到3秒之间使用一些随机数来延迟,而不是不断延迟,这会为用户带来更好的体验

答案 2 :(得分:1)

您可以在Android中查看处理程序 Runnable 类。您可以根据需要延迟方法的时间。

TypeError at /account/
unorderable types: DeferredAttribute() < datetime.datetime()