2016-03-20 6 views
-1

Я пытаюсь показать только одно окно сообщения, используя gover gameover для управления ситуацией, но это не сработает, показывая бесконечные окна сообщений.Показать только одно окно сообщения

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; 

     } 

    } 
+2

Вы должны остановить этот таймер, добавить timer1.Stop() * перед тем * отображать окно сообщения. –

+0

Или измените сообщение на «Игрок 2 победит! Быстро, нажмите кнопку, прежде чем таймер снова закроется!» _;) Пока отображается MessageBox, он предотвращает выполнение следующей строки кода, поэтому 'gameover' не установите значение «true». –

+0

Я должен быть новеньким – Newbie404

ответ

0

MessageBox.Show блокирует выполнение кода, пока вы не закроете окно сообщения, так что вам нужно, чтобы переместить назначение GameOver перед вызовом 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);  
     } 
    } 
0

@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; 

    } 

} 
+0

В будущем избегайте избыточного кода ;-) –