Compartilhar via


Etapa 8: Adicionar um método para verificar se o Player ganha

Você criou um divertido jogo, mas ele precisa de um item adicional.O jogo deve terminar quando o player wins, portanto, você precisará adicionar uma CheckForWinner() método para verificar se o player ganha.

Para adicionar um método para verificar se o player ganha

  1. Adicionar um CheckForWinner() método para seu formulário, 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 foreach loop no Visual C# ou For Each loop no Visual Basic passar por cada rótulo o TableLayoutPanel.Ele usa o operador de igualdade (== no Visual C# e = em Visual Basic) para verificar a cor do ícone do cada rótulo para verificar se ela coincide com o plano de fundo.Se as cores coincidirem, o ícone permanece invisível e o player ainda não corresponde a todos os ícones restantes.Nesse caso, o programa usa um return a instrução para ignorar o restante do método.Se obtém o loop por todos os rótulos sem executar o return instrução, o que significa que todos os ícones foram atendidos.O programa mostra uma MessageBox e, em seguida, chama o formulário Close() método para encerrar o jogo.

  2. Em seguida, ter clique no rótulo manipulador de eventos, chamar a nova CheckForWinner() método.Certifique-se de que seu programa verifica uma vencedora após o segundo ícone mostra que o player clica.Procure a linha onde você definir a cor do ícone clicados segundo e, em seguida, chame o CheckForWinner() método direito 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;
    }
    
  3. Salve e execute o programa.O jogo e combinar todos os ícones.Quando você a vencer, o programa exibe um MessageBox (conforme mostrado na figura a seguir) e, em seguida, fecha a caixa.

    Jogo da memória com MessageBox

    Jogo da memória com MessageBox

Para continuar ou revisar