我的井字游戏中的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();
        }
    }

10-06 02:16