Schritt 3: Zuweisen eines zufällig ausgewählten Symbols zu jeder Bezeichnung

Es wäre zu einfach, wenn die Symbole in jedem Spiel in den gleichen Zellen erscheinen.Um dies zu vermeiden, weisen Sie die Symbole mithilfe einer AssignIconsToSquares()-Methode zufällig den Bezeichnungsfeld-Steuerelementen des Formulars zu.

So weisen Sie jeder Bezeichnung ein zufälliges Symbol zu

  1. Machen Sie sich vor dem Hinzufügen des folgenden Codes bewusst, wie die Methode funktioniert.Es ist ein neues Schlüsselwort verfügbar: foreach in Visual C# und For Each in Visual Basic. (Eine der Zeilen ist absichtlich auskommentiert. Dies wird am Ende dieser Prozedur erklärt.)

    ''' <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. Fügen Sie die AssignIconsToSquares()-Methode wie im vorherigen Schritt gezeigt hinzu.Sie können die Methode direkt unter dem Code einfügen, den Sie unter Schritt 2: Hinzufügen eines zufällig ausgewählten Objekts und einer Liste von Symbolen hinzugefügt haben.

    Wie bereits erwähnt, enthält die AssignIconsToSquares()-Methode ein neues Element: Eine foreach-Schleife in Visual C# und eine For Each-Schleife in Visual Basic.Sie können eine For Each-Schleife verwenden, wenn Sie die gleiche Aktion immer wieder ausführen möchten.In diesem Fall sollen die gleichen Anweisungen für jedes Bezeichnungsfeld aus TableLayoutPanel ausgeführt werden, wie im folgenden Code erläutert wird.Die erste Zeile erstellt eine Variable mit dem Namen control, die nacheinander jedes Steuerelement speichert. Jedes dieser Steuerelement umfasst die Anweisungen, die in der Schleife ausgeführt werden.

    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
    }
    
    HinweisHinweis

    Die Namen "iconLabel" (Symbolbezeichnung) und "control" (Steuerelement) dienen zur Verdeutlichung der Verwendungsweise.Sie können diese Namen durch beliebige andere Namen ersetzen, ohne die Funktionsweise des Codes zu beeinflussen, sofern Sie die Namen in jeder Anweisung innerhalb der Schleife ändern.

    Die AssignIconsToSquares()-Methode durchläuft jedes Bezeichnungsfeld-Steuerelement in TableLayoutPanel und führt für jedes die gleichen Anweisungen aus.Diese Anweisungen rufen ein zufälliges Symbol aus der Liste ab, die Sie unter Schritt 2: Hinzufügen eines zufällig ausgewählten Objekts und einer Liste von Symbolen hinzugefügt haben. (Sie haben deshalb zwei Exemplare jedes Symbols in die Liste eingefügt, damit zufälligen Bezeichnungsfeld-Steuerelementen ein Symbolpaar zugewiesen werden kann.)

    Betrachten Sie den Code genauer, der innerhalb der foreach-Schleife oder der For Each-Schleife ausgeführt wird.Dabei handelt es sich um den folgenden Code.

    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);
    }
    

    In der ersten Zeile wird die Variable control in ein Bezeichnungsfeld mit dem Namen iconLabel konvertiert.Die folgende Zeile ist eine if-Anweisung, die prüft, ob die Konvertierung erfolgt ist.Wenn die Konvertierung funktioniert, werden die Anweisungen innerhalb der if-Anweisung ausgeführt. (Wie Sie vielleicht aus vorherigen Lernprogrammen wissen, kann mit der if-Anweisung eine beliebige Bedingung geprüft werden.) Die erste Zeile in der if-Anweisung erstellt die Variable randomNumber, die eine Zufallszahl enthält, die einem der Elemente in der Symbolliste entspricht.Dazu verwendet die Anweisung die Next-Methode des Random-Objekts, das Sie früher erstellt haben.Die Next-Methode gibt eine Zufallszahl zurück.Diese Zeile verwendet auch die Count-Eigenschaft der icons-Liste, um den Bereich festzulegen, aus dem die Zufallszahl ausgewählt wird.Die nächste Zeile weist der Text-Eigenschaft des Bezeichnungsfelds eines der Symbollistenelemente zu.Die auskommentierte Zeile wird später in diesem Thema erläutert.Schließlich entfernt die letzte Zeile in der if-Anweisung das Symbol aus der Liste, das dem Formular hinzugefügt wurde.

    Vergessen Sie nicht: Wenn Sie sich über die Funktionsweise eines Codeabschnitts nicht sicher sind, können Sie den Mauszeiger über einem Codeelement positionieren und erhalten eine entsprechende QuickInfo.Mithilfe des Visual Studio-Debuggers können Sie auch während der Programmausführung jede Codezeile untersuchen.Weitere Informationen finden Sie unter Wie setze ich den Debugger in Visual Studio ein? oder unter Starten, Unterbrechen, schrittweise Ausführung, Ausführen von Code und Beenden des Debuggens in Visual Studio.

  3. Um das Spielbrett mit Symbolen zu füllen, müssen Sie die AssignIconsToSquares()-Methode aufrufen, sobald das Programm startet.Wenn Sie Visual C# verwenden, fügen Sie direkt unter dem Aufruf der InitializeComponent()-Methode im Form1- Konstruktor eine Anweisung hinzu, mit der das Formular die neue Methode aufruft und sich entsprechend einrichtet, bevor es angezeigt wird.Konstruktoren werden aufgerufen, wenn Sie ein neues Objekt erstellen, beispielsweise eine Klasse oder eine Struktur.Weitere Informationen finden Sie unter Konstruktoren (C#-Programmierhandbuch) oder Verwenden von Konstruktoren und Destruktoren in Visual Basic.

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

    In Visual Basic fügen Sie den AssignIconsToSquares()-Methodenaufruf der Form1_Load-Methode hinzu, sodass der Code wie folgt aussieht.

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AssignIconsToSquares()
    End Sub
    
  4. Speichern Sie das Programm, und führen Sie es aus.Es sollte ein Formular mit zufälligen Symbolen angezeigt werden, die den einzelnen Bezeichnungen zugewiesen sind.

  5. Schließen Sie das Programm, und führen Sie es erneut aus.In der folgenden Abbildung erkennen Sie, dass den einzelnen Bezeichnungsfeldern nun unterschiedliche Symbole zugewiesen sind.

    Vergleichsspiel mit zufälligen Symbolen

    Vergleichsspiel mit zufälligen Symbolen

    Die Symbole sind jetzt sichtbar, weil sie nicht ausgeblendet wurden.Um Sie vor dem Spieler zu verbergen, können Sie für die Forecolor-Eigenschaft jedes Bezeichnungsfelds die Farbe der BackColor-Eigenschaft verwenden.

    TippTipp

    Eine andere Methode zum Ausblenden von Steuerelementen wie Bezeichnungsfeldern ist, deren Eigenschaft Visible auf False festzulegen.

  6. Um die Symbole auszublenden, stoppen Sie das Programm und entfernen die Kommentarmarken für die kommentierte Codezeile innerhalb der For Each-Schleife.

    iconLabel.ForeColor = iconLabel.BackColor
    
    iconLabel.ForeColor = iconLabel.BackColor;
    
  7. Wählen Sie auf der Menüleiste die Schaltfläche Alle speichern, um das Programm zu speichern, und führen Sie es dann aus.Die Symbole scheinen nicht mehr vorhanden zu sein, und es wird nur ein blauer Hintergrund angezeigt.Die Symbole werden jedoch zufällig zugewiesen und sind immer noch vorhanden.Da die Symbole die gleiche Farbe wie der Hintergrund besitzen, sind Sie für den Spieler nicht sichtbar.Es wäre ja auch ein langweiliges Spiel, wenn der Spieler alle Symbole sofort sehen könnte!

So fahren Sie fort oder überprüfen die Angaben