时间推迟计算机移动tic tac toe

时间:2016-02-06 15:50:23

标签: java android

我刚刚学习Java / Android,并编写了一个简单的tic tac toe程序。一切正常,但游戏玩法感觉很奇怪。我有9种方法(每次移动1次)如果它的一个玩家游戏玩家将会调用一个computerMove方法。我想移动,比计算机移动延迟2秒。当我延迟计算机移动时。程序等待2秒钟并显示我的移动,计算机同时移动。

 public void displayForPosition1(View view) {

        piecePlaced = false;
        // Determine the players piece

        if (pos1.equals("") && !gameOver) {

            if (sound) {
                Button one = (Button) this.findViewById(R.id.position2);
                final MediaPlayer mp = MediaPlayer.create(Main2Activity.this, R.raw.button_sound);
                mp.start();
            }

            if (moveCounter % 2 == 0) {
                piece = player1;
            } else {
                piece = player2;
            }

            TextView scoreView = (TextView) findViewById(R.id.position1);
            scoreView.setText(piece);

            moveCounter++;
            pos1 = piece;
            winTest();
        }
        playerTest();
    }

1 个答案:

答案 0 :(得分:0)

可能有更好的方法可以做到这一点,但从我能看到的代码中,我认为这应该可行。

displayForPosition1方法返回之前,屏幕视图不会随着玩家的移动而更新,并且该方法在playerTest方法也会返回之前不会返回。您的2秒延迟在playerTest方法内,然后计算机移动并显示它的移动。因此,displayForPosition1将不会返回,并且新视图将不会出现在屏幕上,直到2秒延迟和计算机移动之后。

一种解决方案可能是在新playerTest上执行Thread方法。然后displayForPosition1方法将立即返回,并显示玩家的移动。同时,第二个线程将休眠2秒钟,然后让计算机移动。

new Thread(new Runnable() {

    @Override
    public void run() {
        playerTest();
    }}).start();

我担心在playerTest方法之外执行displayForPosition1时,计算机的移动将不会显示,直到下次执行displayForPosition1。因此两个动作仍将同时出现。但试试吧,看看会发生什么。