Krok 3: Přiřadit náhodnou ikonu každé jmenovce
Pokud hra skryje vždy stejné ikony na stejných umístěních, není to náročné. Potřebujete přiřadit ikony náhodně svým Label ovládacím prvkům ve formuláři. Uděláte to tak, že přidáte AssignIconsToSquares() metodu.
Přiřadit náhodnou ikonu každé jmenovce
Před přidáním následujícího kódu zvažte, jak metoda funguje. Existuje nové klíčové slovo: foreach v jazyce Visual C# a For Each v jazyce Visual Basic. (Jeden z řádků je záměrně jako komentář, což je vysvětleno na konci této procedury.)
''' <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); } } }
Přidejte AssignIconsToSquares() metodu, jak je uvedeno v předchozím kroku. Můžete ji umístit pod kód, který jste přidali v Krok 2: Přidat náhodný objekt a seznam ikon.
Existuje něco nového ve vaší AssignIconsToSquares() metodě: smyčka foreach v jazyce Visual C# a For Each v jazyce Visual Basic. Použijte smyčku foreach kdykoli, kdy chcete provést stejnou akci znovu a znovu. V tomto případě chcete spustit stejné příkazy pro každou jmenovku ve vašem TableLayoutPanel kontejneru popsané následujícím kódem.
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 }
Poznámka
Názvy iconLabel a ovládací prvek se používají, protože jsou popisné. Tyto názvy můžete nahradit libovolnými názvy a mělo by to pracovat přesně stejně (tak dlouho, dokud jste nezměnili název v každém příkazu uvnitř složených závorek).
Metoda AssignIconsToSquares() prochází jednotlivé ovládací prvky Label v TableLayoutPanel kontejneru a provede stejné příkazy pro každý z nich. Tyto příkazy vyžádají náhodnou ikonu ze seznamu, který jste přidali v Krok 2: Přidat náhodný objekt a seznam ikon. (To je důvod, proč jste zahrnuli dvě z každé ikony v seznamu, aby se spárovaly ikony přiřazené k náhodnému ovládacímu prvku Label.)
Je třeba volat AssignIconsToSquares() metodu hned, jakmile je program spuštěn. Píšete-li kód jazyka Visual C#, přidejte příkaz pod volání metody InitializeComponent() v konstruktoru formuláře Form1, tak formulář zavolá vaši novou metodu, aby se sám nastavil dříve, než je zobrazen.
public Form1() { InitializeComponent(); AssignIconsToSquares(); }
V jazyce Visual Basic nejprve přidejte konstruktor, a pak přidejte volání metody do konstruktoru. Před metodou AssignIconsToSquares(), kterou jste právě vytvořili, začněte psaním kódu Public Sub New(). Když stisknete klávesu Enter k přesunu na další řádek, měla by technologie IntelliSense zobrazit následující kód k dokončení konstruktoru.
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call End Sub
Přidejte volání metody AssignIconsToSquares() tak, že váš konstruktor vypadá jako následující.
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call AssignIconsToSquares() End Sub
Uložte program a spusťte jej. Měl by se zobrazit formulář s náhodnými ikonami přiřazenými každé jmenovce.
Zavřete program a znovu jej spusťte. Nyní jsou různé ikony přiřazeny každé jmenovce, jak je znázorněno na následujícím obrázku.
Skládačka s náhodnými ikonami
Nyní ukončete program a zrušte komentář tohoto řádku kódu uvnitř foreach smyčky.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
Klepněte na tlačítko Uložit vše z panelu nástrojů k uložení programu a spusťte jej. Ikony zdánlivě zmizely – zobrazí se pouze modré pozadí. Avšak ikony jsou náhodně přiřazeny a stále existují. Vzhledem k tomu, že ikony mají stejnou barvu jako pozadí, jsou skryté.
Chcete-li pokračovat nebo znovu projít
Přechod na další výukový program naleznete v tématu Krok 4: Přidat obslužnou rutinu události Click každé jmenovce.
K návratu do předchozího kroku výukového programu přejděte na Krok 2: Přidat náhodný objekt a seznam ikon.