Sdílet prostřednictvím


Krok 3: Přiřazení náhodné ikonu na každý štítek

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

  1. 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 = 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. 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řidání objektu náhodné a seznam ikon.

    Něco nového v vaše AssignIconsToSquares() metoda: foreach smyčky v aplikaci Visual C# a For Each v jazyce Visual Basic.Použijte smyčku For Each 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.První řádek vytváří proměnnou s názvem control , ukládá každý ovládací prvek, jeden v době při smyčku na něj má příkazy ovládací prvek.

    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 nelze nahradit všechny názvy a je stejně pracovat jako změněn název každého příkazu uvnitř smyčky.

    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řidání objektu náhodné 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.)

    Lépe prohlédnout kód, který pracuje uvnitř foreach nebo For Each smyčky.Tento kód je uveden 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);
    }
    

    Převede první řádek control k proměnné Label s názvem iconLabel.Řádek, který po if příkaz, který zkontroluje převod pracoval.Pokud převod úspěšný, příkazy if příkaz Spustit.První řádek v if prohlášení vytváří proměnnou s názvem randomNumber , který obsahuje náhodné číslo odpovídající položky v seznamu ikon.Chcete-li to provést, používá Next metodu Random objekt, který jste vytvořili dříve.Next Metoda vrátí náhodné číslo.Tento řádek se používá také Count vlastnost icons seznamu určit rozsah pro výběr náhodné číslo.Další řádek přiřadí jednu ikonu položky seznamu Text vlastností popisek.Na řádku s komentářem out je vysvětleno dále v tomto tématu.A konečně poslední řádek if příkaz odebere ze seznamu ikonu, která byla přidána do formuláře.

    Nezapomeňte, pokud si nejste jisti neobsahuje některé části kódu, může ukazatel myši nad element kódu a zkontrolujte výsledný tooltip.

  3. 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
    
  4. 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.

  5. 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

    Skládačka s náhodnými ikonami

  6. Nyní ukončete program a zrušte komentář tohoto řádku kódu uvnitř For Each smyčky.

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. 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