Partager via


Étape 3 : assigner une icône aléatoire à chaque contrôle Label

Le jeu manquera d'intérêt s'il masque toujours les mêmes icônes aux mêmes endroits.Vous devez donc assigner les icônes aléatoirement aux contrôles Label dans votre formulaire.Pour cela, ajoutez une méthode AssignIconsToSquares().

Pour assigner une icône aléatoire à chaque contrôle Label

  1. Avant d'ajouter le code suivant, examinez le fonctionnement de la méthode.Il y a un nouveau mot clé : foreach en Visual C# et For Each en Visual Basic.(L'une des lignes est commentée exprès, comme expliqué à la fin de cette procédure.)

    ''' <summary>
    ''' Assign each icon from the list of icons to a random square
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub AssignIconsToSquares()
    
        ' The TableLayoutPanel has 16 labels,
        ' and the icon list has 16 icons,
        ' so an icon is pulled at random from the list
        ' and added to each label
        For Each control In TableLayoutPanel1.Controls
            Dim iconLabel = TryCast(control, Label)
            If iconLabel IsNot Nothing Then
                Dim randomNumber = random.Next(icons.Count)
                iconLabel.Text = icons(randomNumber)
                ' iconLabel.ForeColor = iconLabel.BackColor
                icons.RemoveAt(randomNumber)
            End If
        Next
    
    End Sub
    
    /// <summary>
    /// Assign each icon from the list of icons to a random square
    /// </summary>
    private void AssignIconsToSquares()
    {
        // The TableLayoutPanel has 16 labels,
        // and the icon list has 16 icons,
        // so an icon is pulled at random from the list
        // and added to each label
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            Label iconLabel = control as Label;
            if (iconLabel != null)
            {
                int randomNumber = random.Next(icons.Count);
                iconLabel.Text = icons[randomNumber];
                // iconLabel.ForeColor = iconLabel.BackColor;
                icons.RemoveAt(randomNumber);
            }
        }
    } 
    
  2. Ajoutez la méthode AssignIconsToSquares(), comme indiqué dans l'étape précédente.Vous pouvez l'insérer juste au-dessous du code que vous avez ajouté dans Étape 2 : ajouter un objet aléatoire et une liste d'icônes.

    Il y a un nouvel élément dans votre méthode AssignIconsToSquares() : une boucle foreach en Visual C# et For Each en Visual Basic.Utilisez une boucle For Each chaque fois que vous voulez répéter la même action.Dans ce cas, exécutez les mêmes instructions pour chaque contrôle Label dans votre TableLayoutPanel, comme expliqué dans le code suivant.La première ligne crée une variable nommée control qui enregistre chaque contrôle un par un si ce contrôle a les instructions de la boucle exécutée sur celui-ci.

    For Each control In TableLayoutPanel1.Controls
        ' The statements you want to execute 
        ' for each label go here
        ' The statements use iconLabel to access 
        ' each label's properties and methods
    Next
    
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        // The statements you want to execute 
        // for each label go here
        // The statements use iconLabel to access 
        // each label's properties and methods
    }
    

    [!REMARQUE]

    Les noms iconLabel et control sont utilisés parce qu'ils sont descriptifs.Vous pouvez remplacer ces noms par tous les noms, et que le fonctionnement restera le même tant que vous avez modifié le nom dans chaque instruction à l'intérieur de la boucle.

    La méthode AssignIconsToSquares() parcourt chaque contrôle Label dans le TableLayoutPanel et exécute les mêmes instructions pour chacun d'eux.Ces instructions extraient une icône aléatoire dans la liste que vous avez ajoutée lors de l'Étape 2 : ajouter un objet aléatoire et une liste d'icônes.(C'est la raison pour laquelle vous avez inclus deux fois la même icône dans la liste, afin qu'il y ait une paire d'icônes assignée aux contrôles Label aléatoires.)

    Examinez plus étroitement code qui s'exécute à l'intérieur de la boucle d' foreach ou d' For Each .ce code est reproduit ici.

    Dim iconLabel = TryCast(control, Label)
    If iconLabel IsNot Nothing Then
        Dim randomNumber = random.Next(icons.Count)
        iconLabel.Text = icons(randomNumber)
        ' iconLabel.ForeColor = iconLabel.BackColor
        icons.RemoveAt(randomNumber)
    End If
    
    Label iconLabel = control as Label;
    if (iconLabel != null)
    {
        int randomNumber = random.Next(icons.Count);
        iconLabel.Text = icons[randomNumber];
        // iconLabel.ForeColor = iconLabel.BackColor;
        icons.RemoveAt(randomNumber);
    }
    

    la première ligne convertit la variable d' control à Label nommé iconLabel.La ligne après qui est une instruction d' if qui permet à s'assurer que la conversion a été exécutés.Si la conversion s'exécute, les instructions dans l'exécution de l'instruction d' if .La première ligne de l'instruction d' if crée une variable nommée randomNumber qui contient un nombre aléatoire qui correspond à l'un des éléments dans la liste d'icônes.Pour ce faire, il utilise la méthode d' Next d'objet d' Random que vous avez créé précédemment.La méthode d' Next retourne le nombre aléatoire.Cette ligne utilise également la propriété d' Count de la liste d' icons pour déterminer la plage dont pour choisir le nombre aléatoire.La ligne suivante assigne un des éléments de la liste d'icône à la propriété d' Text du nom.La ligne commentée- est expliquée ultérieurement dans cette rubrique.Enfin, la dernière ligne de l'instruction d' if supprime de la liste l'icône ajoutées au formulaire.

    Souvenez -vous, si vous n'êtes pas sûr de ce qu'une partie de code fait, vous pouvez arrêter le pointeur de la souris sur un élément de code et examiner l'info-bulle résultant.

  3. Vous devez appeler la méthode AssignIconsToSquares() dès le démarrage du programme.Si vous écrivez du code Visual C#, ajoutez une instruction juste au-dessous de l'appel à la méthode InitializeComponent() dans le constructeur Form1 : vous permettrez ainsi à votre formulaire de se configurer avant son affichage grâce à un appel à votre nouvelle méthode.

    public Form1()
    {
        InitializeComponent();
    
        AssignIconsToSquares();
    }
    

    Pour Visual Basic, ajoutez d'abord le constructeur, puis l'appel de méthode au constructeur.Avant la méthode AssignIconsToSquares() que vous venez de créer, commencez à taper le code Public Sub New().Lorsque vous appuyez sur la touche ENTRÉE pour passer à la ligne suivante, IntelliSense doit afficher le code suivant pour compléter le constructeur.

    Public Sub New()
        ' This call is required by Windows Form Designer
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call
    End Sub
    

    Ajoutez l'appel de méthode AssignIconsToSquares() pour que votre constructeur se présente comme suit :

    Public Sub New()
        ' This call is required by Windows Form Designer
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call
        AssignIconsToSquares()
    End Sub
    
  4. Enregistrez votre programme et exécutez-le.Il doit afficher un formulaire avec des icônes aléatoires assignées à chaque contrôle Label.

  5. Fermez votre programme et exécutez-le à nouveau.Des icônes différentes sont désormais assignées à chaque contrôle Label, comme indiqué dans l'image suivante.

    Jeu de combinaisons avec des icônes aléatoires

    Jeu de combinaisons avec des icônes aléatoires

  6. Maintenant, arrêtez le programme et supprimez les marques de commentaire de cette ligne de code à l'intérieur de la boucle For Each.

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. Cliquez sur le bouton Enregistrer tout de la barre d'outils pour enregistrer votre programme, puis exécutez-le.Les icônes semblent avoir disparu (seul un arrière-plan bleu est affiché).En réalité, les icônes sont assignées aléatoirement et sont toujours présentes.Étant donné que les icônes ont la même couleur que l'arrière-plan, elles sont invisibles.

Pour continuer ou examiner