Partager via


Étape 8 : ajouter une méthode pour vérifier si le joueur a gagné

Vous avez créé un jeu divertissant, mais il a besoin d'un élément supplémentaire.Le jeu doit se terminer en cas de victoire du joueur : vous devez donc ajouter une méthode CheckForWinner() pour vérifier si le joueur a gagné.

Pour ajouter une méthode afin de vérifier si le joueur a gagné

  1. Ajoutez une méthode CheckForWinner() à votre formulaire, comme indiqué dans le code suivant.

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

    La méthode utilise une autre boucle foreach en Visual C# ou For Each en Visual Basic pour parcourir chaque contrôle Label dans le TableLayoutPanel.Elle utilise l'opérateur d'égalité (== en Visual C# et = en Visual Basic) pour analyser la couleur de l'icône de chaque contrôle Label et vérifier si elle correspond à celle de l'arrière-plan.Si les couleurs correspondent, l'icône reste invisible et le joueur n'a pas associé toutes les icônes restantes.Dans ce cas, le programme utilise une instruction return pour ignorer le reste de la méthode.Si la boucle parcourt tous les contrôles Label sans exécuter l'instruction return, cela signifie que toutes les icônes ont été associées.Le programme affiche un MessageBox, puis appelle la méthode Close() du formulaire pour terminer le jeu.

  2. Ensuite, appelez la nouvelle méthode CheckForWinner() via le gestionnaire d'événements Click du contrôle Label.Assurez-vous que votre programme vérifie s'il y a un gagnant après avoir affiché la deuxième icône sur laquelle le joueur a cliqué.Recherchez la ligne où vous définissez la couleur de la deuxième icône sélectionnée par le joueur, puis appelez la méthode CheckForWinner() juste après, comme indiqué dans le code suivant.

    ' 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. Enregistrez et exécutez le programme.Jouez au jeu et associez toutes les icônes.Lorsque vous gagnez, le programme affiche un MessageBox (comme indiqué dans l'image suivante), puis ferme la boîte.

    Jeu de combinaisons avec MessageBox

    Jeu de combinaisons avec MessageBox

Pour continuer ou examiner