只显示一个消息框

Show just one message box

我试图使用 gameover bool 来控制情况只显示一个消息框,但它不起作用,它显示了无限个消息框。

bool player2turn = false;
bool gameover = false;


private void timer1_Tick(object sender, EventArgs e)
 {

  if ((pb00.BackColor == pb10.BackColor) && (gameover == false))
     {
       winner();               
     }


 }

private void winner()
 {

  if (player2turn == false)
     {
       MessageBox.Show("Player 2 wins!", "Retry?", MessageBoxButtons.YesNo);
       gameover = true;
      }
  else
      {
       MessageBox.Show("Player 1 wins!", "Retry?", MessageBoxButtons.YesNo);
       gameover = true;

      }

  }

MessageBox.Show 会阻止代码的执行,直到您关闭消息框,因此您需要在调用 MessageBox.Show.

之前移动 gameover 的分配
private void winner()
 {

  if (player2turn == false)
     {
       gameover = true;
       MessageBox.Show("Player 2 wins!", "Retry?", MessageBoxButtons.YesNo);       
      }
  else
      {
       gameover = true;
       MessageBox.Show("Player 1 wins!", "Retry?", MessageBoxButtons.YesNo);       
      }
  }

@HansPassant 谢谢

private void winner()
{

if (player2turn == false)
  {
   timer1.Stop();
   MessageBox.Show("Player 2 wins!", "Retry?", MessageBoxButtons.YesNo);
   gameover = true;
  }
else
  {
   timer1.Stop();
   MessageBox.Show("Player 1 wins!", "Retry?", MessageBoxButtons.YesNo);
   gameover = true;

  }

}