Krok 3: Přiřaďte jednotlivým jmenovkám náhodné ikony
Pokud se ikony každou hru zobrazí ve stejných buňkách, není to zrovna náročné.Aby k tomu nedošlo, přiřaďte ikony k ovládacím prvkům popisku ve formuláři náhodně pomocí metody AssignIconsToSquares().
Přiřazení náhodné ikony každému popisku
Před přidáním následujícího kódu se zamyslete nad tím, jak metoda funguje.V jazyce Visual C# existuje nové klíčové slovo foreach a v jazyce Visual Basic klíčové slovo For Each. (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 = 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); } } }
Přidejte metodu AssignIconsToSquares() podle popisu v předchozím kroku.Můžete ji umístit přímo pod kód, který jste přidali v kroku Krok 2: Přidejte náhodný objekt a seznam ikon.
Jak již bylo zmíněno dříve, vaše metoda AssignIconsToSquares() obsahuje novinky: smyčku foreach v jazyce Visual C# a smyčku For Each v jazyce Visual Basic.Smyčku For Each můžete použít kdykoli, když chcete provést stejnou akci znovu a znovu.V tomto případě chcete spustit stejné příkazy pro každý popisek ve vašem kontejneru TableLayoutPanel podle popisu následujícím kódem.První řádek vytvoří proměnnou s názvem control, která obsahuje vždy jeden ovládací prvek, na kterém jsou současně spouštěny výroky ve smyčce.
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 kód by měl pracovat přesně stejně, dokud nezměníte název v každém výroku uvnitř smyčky.
Metoda AssignIconsToSquares() iteruje jednotlivé ovládací prvky popisku v kontejneru TableLayoutPanel a pro každý z nich spustí stejný příkaz.Tyto příkazy vyžádají náhodnou ikonu ze seznamu, který jste přidali v kroku Krok 2: Přidejte 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 popisku.)
Podívejte se důkladněji na kód, který běží uvnitř smyčky foreach nebo For Each.Tento kód je reprodukován zde.
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); }
První řádek převede proměnnou control na popisek s názvem iconLabel.Následující řádek je příkaz if, který zkontroluje, zda se převod povedl.Pokud byl převod úspěšný, spustí se příkazy v příkazu if. (Jak si pravděpodobně pamatujete z předchozích tutoriálů, příkaz if se používá k vyhodnocení libovolné podmínky.) První řádek v příkazu if vytvoří proměnnou s názvem randomNumber, která obsahuje náhodné číslo, které odpovídá jedné z položek v seznamu ikon.K tomu použije metodu Next objektu Random, který jste vytvořili dříve.Metoda Next vrátí náhodné číslo.Tento řádek také používá vlastnost Count seznamu icons k určení rozsahu, ze kterého se náhodné číslo vybere.Další řádek přiřadí jednu z položek seznamu ikon vlastnosti Text popisku.Komentovaný řádek je vysvětlen později v tomto tématu.Nakonec poslední řádek v příkazu if odebere ze seznamu ikonu, která byla přidána do formuláře.
Nezapomeňte, že pokud si nejste jisti, co dělá některá část kódu, můžete umístit ukazatel myši nad prvek kódu a přečíst si zobrazený popisek.Můžete také krokovat po řádcích kódu, zatímco je program spuštěn pomocí ladicího programu sady Visual Studio.Další informace naleznete v tématu Návody: Krokování s ladicím programem v sadě Visual Studio nebo Zastavení, pozastavení, krok, spuštění prostřednictvím kódu a ukončení ladění v sadě Visual Studio.
Pokud chcete zaplnit hrací plochu ikonami, je třeba ihned při spuštění programu volat metodu AssignIconsToSquares().Používáte-li jazyk Visual C#, přidejte příkaz pod volání metody InitializeComponent() v Form1konstruktoru, aby formulář volal vaši novou metodu pro vlastní nastavení, než se zobrazí.Konstruktory jsou volány při vytváření nového objektu, například třídy nebo struktury.Další informace naleznete v tématech Konstruktory (průvodce programováním v jazyce C#) nebo Používání konstruktorů a destruktorů v jazyce Visual Basic.
public Form1() { InitializeComponent(); AssignIconsToSquares(); }
V jazyce Visual Basic přidejte do metody Form1_Load volání metody AssignIconsToSquares(), aby kód vypadal následovně.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 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ému popisku.
Ukončete program a znovu jej spusťte.Všimněte si, že každému popisku jsou přiřazeny jiné ikony, viz následující obrázek.
Porovnávací hra s náhodnými ikonami
Ikony jsou nyní viditelné, protože jste je neskryli.Chcete-li je pro hráče skrýt, můžete nastavit vlastnost každého popisku Forecolor na stejnou barvu jako jeho vlastnost BackColor.
Tip
Další způsob, jak skrýt ovládací prvky, například popisky, je nastavit jejich vlastnost Viditelný na možnost False.
Chcete-li skrýt ikony, ukončete program a odeberte značky komentáře z komentovaného řádku kódu uvnitř smyčky For Each.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
Na panelu nabídek kliknutím na tlačítko Uložit vše uložte program a spusťte jej.Ikony zdánlivě zmizely – zobrazí se pouze modré pozadí.Ikony jsou ale náhodně přiřazeny a stále existují.Vzhledem k tomu, že ikony mají stejnou barvu jako pozadí, hráč je nevidí.Přece by to byla velmi jednoduchá hra, kdyby hráč hned viděl všechny ikony!
Chcete-li pokračovat nebo přezkoumat
Chcete-li zobrazit další krok tutoriálu, přejděte na Krok 4: Přidejte k jednotlivým jmenovkám obslužnou rutinu události kliknutí.
Chcete-li se vrátit k předchozímu kroku tutoriálu, přejděte na Krok 2: Přidejte náhodný objekt a seznam ikon.