Passaggio 3: assegnare un'icona casuale a ogni etichetta

Se il gioco nasconde sempre le stesse icone nelle stesse posizioni, le difficoltà sono pressoché nulle.È necessario assegnare casualmente le icone ai controlli Label nel form.A tale scopo, si aggiunge un metodo AssignIconsToSquares().

Per assegnare un'icona casuale a ogni etichetta

  1. Prima di aggiungere il codice seguente, considerare come funziona il metodo.È presente una nuova parola chiave: foreach in Visual C# e For Each in Visual Basic.Una delle righe è appositamente impostata come commento; la spiegazione è riportata al fondo della procedura.

    ''' <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 As Label = TryCast(control, Label)
            If iconLabel IsNot Nothing Then
                Dim randomNumber As Integer = random.Next(icons.Count)
                iconLabel.Text = icons.ElementAt(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. Aggiungere il metodo AssignIconsToSquares() come illustrato nel passaggio precedente.È possibile inserirlo immediatamente dopo il codice aggiunto in Passaggio 2: aggiungere un oggetto casuale e un elenco di icone.

    Nel metodo AssignIconsToSquares() è presente una novità: un ciclo foreach in Visual C# e For Each in Visual Basic.Il ciclo foreach viene utilizzato ogni qualvolta si desidera eseguire la stessa azione ripetutamente.In questo caso, si desidera eseguire le stesse istruzioni per ogni etichetta in TableLayoutPanel, come spiegato dal codice seguente.

    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
    }
    

    Nota

    I nomi iconLabel e control vengono utilizzati in quanto nomi descrittivi.È tuttavia possibile sostituirli con altri nomi senza che la procedura ne risulti pregiudicata, a condizione che si modifichi il nome in ogni istruzione racchiusa tra parentesi graffe.

    Il metodo AssignIconsToSquares() scorre ogni controllo Label in TableLayoutPanel ed esegue le stesse istruzioni per ognuno di essi.Tali istruzioni traggono un'icona casuale dall'elenco aggiunto in Passaggio 2: aggiungere un oggetto casuale e un elenco di icone.Nell'elenco sono state incluse coppie di icone, in modo tale da poter assegnare una coppia di icone ai controlli Label casuali.

  3. È necessario chiamare il metodo AssignIconsToSquares() non appena il programma viene avviato.Se si utilizza codice Visual C#, aggiungere un'istruzione immediatamente dopo la chiamata al metodo InitializeComponent() nel costruttore Form1, in modo che il form chiami il nuovo metodo e venga configurato prima di essere visualizzato.

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

    Per Visual Basic, aggiungere per prima cosa il costruttore, quindi la chiamata al metodo nel costruttore.Prima del metodo AssignIconsToSquares() appena creato, iniziare digitando il codice Public Sub New().Premendo il tasto INVIO per spostarsi nella riga successiva, IntelliSense deve visualizzare il seguente codice per completare il costruttore.

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

    Aggiungere la chiamata al metodo AssignIconsToSquares(), in modo che il costruttore appaia come segue.

    Public Sub New()
        ' This call is required by Windows Form Designer
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call
        AssignIconsToSquares()
    End Sub
    
  4. Salvare ed eseguire il programma.Dovrebbe visualizzare un form con icone casuali assegnate a ogni etichetta.

  5. Chiudere il programma, quindi eseguirlo nuovamente.Icone diverse sono ora assegnate a ogni etichetta, come mostrato nell'immagine seguente.

    Gioco delle coppie con icone casuali

    Matching game with random icons

  6. Arrestare ora il programma e rimuovere il commento dalla riga di codice nel ciclo foreach.

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. Fare clic sul pulsante della barra degli strumenti Salva tutto per salvare il programma, quindi eseguirlo.Le icone sembrano essere scomparse, è presente soltanto uno sfondo blu.Le icone tuttavia sono assegnate casualmente e sono ancora al loro posto.Essendo dello stesso colore dello sfondo, le icone sono invisibili.

Per continuare o rivedere