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
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 = 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); } } }
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 For Each 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.La prima riga viene creata una variabile denominata control tale archiviare ogni controllo uno alla volta mentre il controllo presenta le istruzioni del ciclo eseguito su.
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.È possibile sostituirli con tutti i nomi e funzionerebbe esattamente lo stesso purché sia stato modificato il nome in ogni istruzione nel ciclo.
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.
Osservare più vicina al codice che viene eseguito in foreach o For Each ciclo.Questo codice viene riprodotto di seguito.
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 prima riga converte control variabile a un oggetto Label denominato iconLabel.La riga dopo averlo if istruzione che controlla per garantire la conversione eseguita.Se la conversione viene eseguita, le istruzioni in if esecuzione dell'istruzione.La prima riga in if l'istruzione consente di creare una variabile denominata randomNumber che contiene un numero casuale che corrisponde a uno degli elementi nell'elenco di icone.A tale scopo, utilizzare Next metodo di Random oggetto creato precedentemente.Next il metodo restituisce il numero casuale.Questa riga viene utilizzato Count proprietà di icons elencare per determinare l'intervallo da cui scegliere il numero casuale.La riga successiva viene assegnato uno degli elementi dell'icona a Text proprietà dell'etichetta.La riga commentata-fuori è illustrata più avanti in questo argomento.Infine, l'ultima riga in if l'istruzione consente di rimuovere dall'icona aggiunto al form.
Tenere presente che, se non si è certi che una parte del codice esegue, è possibile posizionare il puntatore del mouse su un elemento di codice e la descrizione comando risultante.
È 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
Salvare ed eseguire il programma.Dovrebbe visualizzare un form con icone casuali assegnate a ogni etichetta.
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
Arrestare ora il programma e rimuovere il commento dalla riga di codice nel ciclo For Each.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
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 l'esercitazione
Per andare al passaggio successivo dell'esercitazione, vedere Passaggio 4: aggiungere un gestore degli eventi Click a ogni etichetta.
Per tornare al passaggio precedente dell'esercitazione, vedere Passaggio 2: aggiungere un oggetto casuale e un elenco di icone.