Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Fügen Sie Bezeichnungsverweise zu Ihrem Formular hinzu, indem Sie den folgenden Code in
Form1.cs
oderForm1.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.
Ändern Sie den Click Ereignishandler in
Form1.cs
oderForm1.vb
, um die neuefirstClicked
Referenzvariable zu verwenden. Entfernen Sie die letzte Anweisung in derlabel1_Click()
-Ereignishandlermethode (clickedLabel.ForeColor = Color.Black;
) und ersetzen Sie sie wie folgt durch dieif
-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; } } }
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.
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 Nothing
identisch 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.
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.
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.
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.
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
oderForm1.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
undsecondClicked
, um die Symbole der beiden Bezeichnungen zu machen, die der Spieler wieder unsichtbar ausgewählt hat. - Sie setzt die
firstClicked
undsecondClicked
Referenzvariablen aufnull
in C# undNothing
in Visual Basic zurück.
Wechseln Sie zum Code-Editor und fügen Sie Code an den Anfang und das Ende der Ereignishandlermethode von
label1_Click()
inForm1.cs
oderForm1.vb
hinzu. Mit diesem Code wird überprüft, ob der Timer aktiviert ist, diesecondClicked
Referenzvariable festlegen und den Timer starten. Dielabel1_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 VerweisvariablenfirstClicked
undsecondClicked
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.
- 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.