Etapa 8: Adicionar um método para verificar se o jogador ganhou
Você criou um jogo divertido, mas ele precisa de um item adicional para ser finalizado.O jogo deve terminar quando os jogadores ganham, de modo que você precisa adicionar um método CheckForWinner() para verificar se o jogador ganhou.
Para adicionar um método para verificar se o jogador ganhou
Adicione um método CheckForWinner() ao fim do seu código, abaixo do manipulador de eventos timer1_Tick(), conforme mostrado no código a seguir.
''' <summary> ''' Check every icon to see if it is matched, by ''' comparing its foreground color to its background color. ''' If all of the icons are matched, the player wins ''' </summary> Private Sub CheckForWinner() ' Go through all of the labels in the TableLayoutPanel, ' checking each one to see if its icon is matched For Each control In TableLayoutPanel1.Controls Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing AndAlso iconLabel.ForeColor = iconLabel.BackColor Then Exit Sub Next ' If the loop didn't return, it didn't find ' any unmatched icons ' That means the user won. Show a message and close the form MessageBox.Show("You matched all the icons!", "Congratulations") Close() End Sub
/// <summary> /// Check every icon to see if it is matched, by /// comparing its foreground color to its background color. /// If all of the icons are matched, the player wins /// </summary> private void CheckForWinner() { // Go through all of the labels in the TableLayoutPanel, // checking each one to see if its icon is matched foreach (Control control in tableLayoutPanel1.Controls) { Label iconLabel = control as Label; if (iconLabel != null) { if (iconLabel.ForeColor == iconLabel.BackColor) return; } } // If the loop didn’t return, it didn't find // any unmatched icons // That means the user won. Show a message and close the form MessageBox.Show("You matched all the icons!", "Congratulations"); Close(); }
O método usa outro loop foreach no Visual C# ou o loop For Each no Visual Basic para passar em cada rótulo no TableLayoutPanel.Ele usa o operador de igualdade (== no Visual C# e = no Visual Basic) para examinar a cor do ícone de cada rótulo e verificar se ela corresponde ao plano de fundo.Se as cores corresponderem, o ícone permanecerá invisível e o jogador não combinou todos os ícones restantes.Nesse caso, o programa usa uma instrução return para ignorar o restante do método.Se o loop passar por todos os rótulos sem executar a instrução return, isso significa que todos os ícones no formulário foram combinados.O programa mostra uma MessageBox para parabenizar o jogador ganhador e, em seguida, chama o método Close() do formulário para encerrar o jogo.
Em seguida, o manipulador de eventos Click do rótulo chama o novo método CheckForWinner().Verifique se seu programa busca um ganhador imediatamente depois que ele mostra o segundo ícone que o jogador escolhe.Procure a linha onde você define a cor do segundo ícone escolhido e chame o método CheckForWinner() logo depois disso, conforme mostrado no código a seguir.
' If the player gets this far, the timer isn't ' running and firstClicked isn't Nothing, ' so this must be the second icon the player clicked ' Set its color to black secondClicked = clickedLabel secondClicked.ForeColor = Color.Black ' Check to see if the player won CheckForWinner() ' If the player clicked two matching icons, keep them ' black and reset firstClicked and secondClicked ' so the player can click another icon If firstClicked.Text = secondClicked.Text Then firstClicked = Nothing secondClicked = Nothing Exit Sub End If
// If the player gets this far, the timer isn't // running and firstClicked isn't null, // so this must be the second icon the player clicked // Set its color to black secondClicked = clickedLabel; secondClicked.ForeColor = Color.Black; // Check to see if the player won CheckForWinner(); // If the player clicked two matching icons, keep them // black and reset firstClicked and secondClicked // so the player can click another icon if (firstClicked.Text == secondClicked.Text) { firstClicked = null; secondClicked = null; return; }
Salve e execute o programa.Jogue o jogo e combine todos os ícones.Quando você ganha, o programa exibe uma MessageBox de congratulação (conforme mostrado na imagem a seguir) e fecha a caixa.
Jogo da memória com MessageBox
Para continuar ou revisar
Para ir para a próxima etapa do tutorial, consulte Etapa 9: Experimentar outros recursos.
Para retornar à etapa anterior do tutorial, consulte Etapa 7: Manter os pares visíveis.