Search code examples
c#booleanmessageboxsingle-instance

Show just one message box


I'm trying to show just one message box using the gameover bool to control the situation but it doesn't work, its showing infinite message boxes.

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;

      }

  }

Solution

  • MessageBox.Show blocks execution of the code until you close the message box, so you need to move the assignment of gameover before the call to MessageBox.Show.

    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);       
          }
      }