Freigeben über


Tutorial: Hinzufügen von Verweisvariablen und einem Timer-Steuerelement zu Ihrer Memory-Spiel in einer WinForms-App

In dieser Reihe von vier Lernprogrammen erstellen Sie ein passendes Spiel, bei dem der Spieler Paare von ausgeblendeten Symbolen abgleicht.

Das Programm für das Memory-Spiel muss nachverfolgen, welche Label-Steuerelemente der Spielende auswählt. Nachdem ein Spieler die erste Bezeichnung ausgewählt hat, sollte das Programm das Symbol anzeigen. Nachdem die zweite Beschriftung ausgewählt wurde, sollte das Programm beide Symbole für kurze Zeit anzeigen. Anschließend werden beide Symbole ausgeblendet.

Ihr Programm verfolgt anhand der Referenzvariablen , welches Label Sie zuerst und als zweites auswählen. Ein Timer blendet die Symbole aus und steuert, wie lange die Symbole angezeigt werden sollen.

  • Labelreferenzen hinzufügen.
  • Fügen Sie einen Timer hinzu.

Voraussetzungen

Dieses Lernprogramm baut auf vorherigen Lernprogrammen auf, Erstellen einer passenden Spieleanwendung und Hinzufügen von Symbolen zu Ihrem passenden Spiel. Schließen Sie diese Tutorials zuerst ab.

Labelverweise hinzufügen

In diesem Abschnitt fügen Sie Ihrem Code zwei Referenzvariablen hinzu. Sie behalten den Überblick über oder verweisen auf Label-Objekte.

  1. Fügen Sie Bezeichnungsverweise zu Ihrem Formular hinzu, indem Sie den folgenden Code in Form1.cs oder Form1.vb verwenden.

    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

Wenn Sie C# verwenden, setzen Sie den Code nach der öffnenden geschweiften Klammer und direkt nach der Klassendeklaration (public partial class Form1 : Form). Wenn Sie Visual Basic verwenden, platzieren Sie den Code direkt hinter der Klassendeklaration (Public Class Form1).

Diese Anweisungen bewirken nicht, dass Label-Steuerelemente im Formular angezeigt werden, da kein Schlüsselwort new vorhanden ist. Wenn das Programm gestartet wird, werden sowohl firstClicked als auch secondClicked für C# oder Nothing für Visual Basic auf null festgelegt.

  1. Ändern Sie den Click Ereignishandler in Form1.cs oder Form1.vb, um die neue firstClicked Referenzvariable zu verwenden. Entfernen Sie die letzte Anweisung in der label1_Click()-Ereignishandlermethode (clickedLabel.ForeColor = Color.Black;) und ersetzen Sie sie wie folgt durch die if-Anweisung.

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label1_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon 
            // in the pair that the player clicked,
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
    
                return;
            }
        }
    }
    

  1. Speichern und ausführen Sie Ihr Programm. Wählen Sie eines der Label-Steuerelemente aus. Das entsprechende Symbol wird angezeigt. Wählen Sie das nächste Label-Steuerelement aus. Sie werden bemerken, dass nichts passiert.

    Screenshot: Memory-Spiel mit einem angezeigten Symbol

    Nur das erste ausgewählte Symbol wird angezeigt. Die anderen Symbole sind unsichtbar.

Das Programm verfolgt bereits die erste Bezeichnung, die der Spieler ausgewählt hat. Der Verweis firstClicked ist weder null in C# noch Nothing in Visual Basic. Wenn Ihre if-Anweisung findet, dass firstClicked nicht mit null oder Nothingidentisch ist, werden die Anweisungen ausgeführt.

Hinzufügen eines Zeitgebers

Die Memory-App verwendet ein Timer-Steuerelement. Ein Timer wartet und löst dann ein Ereignis aus, das als Tick bezeichnet wird. Ein Timer kann eine Aktion starten oder eine Aktion regelmäßig wiederholen.

In Ihrem Programm ermöglicht der Timer einem Spieler die Auswahl von zwei Symbolen. Wenn die Symbole nicht übereinstimmen, blendet sie die beiden Symbole nach kurzer Zeit erneut aus.

  1. Wählen Sie die Registerkarte Toolbox aus, und doppelklicken Sie in der Kategorie Komponenten auf die Timer-Komponente, oder ziehen Sie sie auf Ihr Formular. Das Timersymbol namens timer1wird in einem Leerzeichen unterhalb des Formulars angezeigt.

    Screenshot zeigt das Timersymbol unterhalb des Formulars.

  2. Wählen Sie das Timer1--Symbol aus, um den Timer auszuwählen. Wählen Sie im Fenster Eigenschaften die Schaltfläche Eigenschaften, um die Eigenschaften anzuzeigen.

  3. Legen Sie die eigenschaft Interval auf 750fest, die 750 Millisekunden beträgt.

    Die Eigenschaft Interval informiert den Timer, wie lange er zwischen Ticks warten soll, wenn er das Tick-Ereignis auslöst. Ihr Programm ruft die Start()-Methode auf, um den Timer zu starten, nachdem der Spieler die zweite Bezeichnung ausgewählt hat.

  4. Wählen Sie das Timer-Steuerelementsymbol aus, und drücken Sie dann die EINGABETASTE, oder doppelklicken Sie auf den Timer. Die IDE fügt Form1.cs oder Form1.vb einen leeren Tick-Ereignishandler hinzu. Ersetzen Sie den Code durch den folgenden Code.

    /// <summary>
    /// This timer is started when the player clicks 
    /// two icons that don't match,
    /// so it counts three quarters of a second 
    /// and then turns itself off and hides both icons
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void timer1_Tick(object sender, EventArgs e)
    {
        // Stop the timer
        timer1.Stop();
    
        // Hide both icons
        firstClicked.ForeColor = firstClicked.BackColor;
        secondClicked.ForeColor = secondClicked.BackColor;
    
        // Reset firstClicked and secondClicked 
        // so the next time a label is
        // clicked, the program knows it's the first click
        firstClicked = null;
        secondClicked = null;
    }
    

Der Tick-Ereignishandler bewirkt drei Dinge:

  • Um sicherzustellen, dass der Timer nicht läuft, wird die Stop()-Methode aufgerufen.
  • Es verwendet zwei Referenzvariablen, firstClicked und secondClicked, um die Symbole der beiden Bezeichnungen zu machen, die der Spieler wieder unsichtbar ausgewählt hat.
  • Sie setzt die firstClicked und secondClicked Referenzvariablen auf null in C# und Nothing in Visual Basic zurück.
  1. Wechseln Sie zum Code-Editor und fügen Sie Code an den Anfang und das Ende der Ereignishandlermethode von label1_Click() in Form1.cs oder Form1.vbhinzu. Mit diesem Code wird überprüft, ob der Timer aktiviert ist, die secondClicked Referenzvariable festlegen und den Timer starten. Die label1_Click()-Ereignishandlermethode sieht nun wie folgt aus:

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label1_Click(object sender, EventArgs e)
    {
        // The timer is only on after two non-matching 
        // icons have been shown to the player, 
        // so ignore any clicks if the timer is running
        if (timer1.Enabled == true)
            return;
    
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon
            // in the pair that the player clicked, 
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
                return;
            }
    
            // If the player gets this far, the timer isn't
            // running and firstClicked isn't null,
            // so this must be the second icon the player clicked
            // Set its color to black
            secondClicked = clickedLabel;
            secondClicked.ForeColor = Color.Black;
    
            // If the player gets this far, the player 
            // clicked two different icons, so start the 
            // timer (which will wait three quarters of 
            // a second, and then hide the icons)
            timer1.Start();
        }
    }
    

  • Der Code oben in der Methode überprüft, ob der Timer gestartet wurde, indem der Wert der eigenschaft Enabled überprüft wurde. Wenn der Spieler die ersten beiden Labels auswählt und der Timer gestartet wird, passiert nichts, wenn er ein drittes Label auswählt.
  • Der Code am Ende der Methode legt die secondClicked-Referenzvariable fest, um das zweite Label-Steuerelement nachzuverfolgen. Anschließend wird diese Symbolfarbe auf Schwarz festgelegt, um sie sichtbar zu machen. Dann startet das System den Timer im Einzelmodus, sodass er 750 Millisekunden wartet und dann einen einzelnen Tick auslöst. Der Tick-Ereignishandler des Timers blendet die beiden Symbole aus und setzt die Verweisvariablen firstClicked und secondClicked zurück. Das Formular ist bereit, damit der Spieler ein anderes Symbolpaar auswählen kann.

Anmerkung

Wenn Sie den label1_Click() Codeblock kopieren und einfügen, anstatt den Code manuell einzugeben, sollten Sie den bestehenden label1_Click() Code ersetzen. Andernfalls erhalten Sie einen doppelten Codeblock.

  1. Speichern und ausführen Sie Ihr Programm. Wählen Sie ein Quadrat aus, und das Symbol wird angezeigt. Wählen Sie ein anderes Quadrat aus. Das Symbol wird kurz angezeigt und dann werden beide Symbole ausgeblendet.

Ihr Programm verfolgt jetzt die ersten und zweiten Symbole, die Sie auswählen. Er verwendet den Timer, um anzuhalten, bevor die Symbole ausgeblendet werden.

Nächste Schritte

Wechseln Sie zum nächsten Tutorial, um zu lernen, wie Sie Ihr Zuordnungsspiel fertigstellen.