我的井字游戏中的checkForWin()方法应该检查当前玩家并为该获胜者授予该玩家信用,但尤其是在numOfPlayers条件成立的情况下,它总是为错误的玩家提供信用。一名玩家赢得了比赛,但第二名获得了胜利,我已经检查以确保在将文本设置为按钮之后立即调用checkForWin()方法,然后替换当前玩家,但问题仍然存在。我需要帮助。这不是全部代码,只是我认为相关的部分。
@Override
public void onClick(View v) {
if (!((Button) v).getText().toString().equals("")) {
return;
}
if (numOfPlayers){
do {
((Button) v).setText("X");
checkForWin();
player1Turn = !player1Turn;
}
while (player1Turn);
ComputerPlays();
}
else {
if (player1Turn) {
((Button) v).setText("X");
} else {
((Button) v).setText("O");
}
}
roundCount++;
if (checkForWin()) {
if (player1Turn) {
player1Wins();
} else {
player2Wins();
}
} else if (roundCount == 9) {
draw();
} else {
player1Turn = !player1Turn;
}
}
private void ComputerPlays()
{
Random rand;
rand = new Random();
if (roundCount!=9) {
int i;
int j;
do {
i = rand.nextInt( 2 );
j = rand.nextInt(2);
}while (!game_buttons[i][j].getText().toString().equals(""));
game_buttons[i][j].setText("O");
}
}
最佳答案
我知道导致您在checkforwin之后交换playerturn,您需要使用:
if (checkForWin()) {
if (!player1Turn) {
player1Wins();
} else {
player2Wins();
}
}