虽然循环不会在bool C#上破坏

1 c# while-loop

我不明白为什么我的while循环不会在我分配bool变量(gameEnded)时停止循环true.

Board board = new Board();
bool gameEnded = false;
while (!gameEnded)
{
    gameEnded = board.DrawCheck(board); //one of these three methods returns true
    gameEnded = board.WinCheckO(board);
    gameEnded = board.WinCheckX(board);

    Render(board);
    bool turnO = false;
    Console.WriteLine("Player X's turn.");
    //... here some code that gets executed right
}
Run Code Online (Sandbox Code Playgroud)

因此,gameEnded布尔变量应该赋值为true,因此循环中断.我检查了Check something方法返回true.修改后的版本工作正常,即打破循环.

Board board = new Board();
bool gameEnded = false;
while (!gameEnded)
{

    if (board.WinCheckX(board))
     {
         Console.WriteLine("X player won!");
         break;
     }
     else if (board.WinCheckO(board))
     {
         Console.WriteLine("O player won!");
         break;
     }
     else if (board.DrawCheck(board))
     {
         Console.WriteLine("It's a tie!");
         break;
     }

    Render(board);
    bool turnO = false;
    Console.WriteLine("Player X's turn.");
        //... here some code that gets executed right
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

das*_*ght 7

//one of these three methods returns true
Run Code Online (Sandbox Code Playgroud)

因为有三个赋值,所以这些方法中的一个返回是不够的true:只有最后一个赋值才有效,所以除非board.WinCheckX(board)返回true,否则循环继续.

修复很简单:将三个赋值与||运算符组合在一起:

gameEnded = board.DrawCheck(board)
      || board.WinCheckO(board)
      || board.WinCheckX(board);
Run Code Online (Sandbox Code Playgroud)

这种方法的另一个好处是,只要其中一种方法返回true,就不会因||操作员的短路而产生额外的呼叫.