我刚刚学习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();
}
答案 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
。因此两个动作仍将同时出现。但试试吧,看看会发生什么。