Freigeben über


Tutorial: Anzeigen einer Meldung in der WinForms-App für Ihr passendes Spiel

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

In diesem Tutorial überarbeiten Sie Ihr Vergleichsspiel, um übereinstimmende Paare sichtbar zu halten und eine Glückwunschnachricht anzuzeigen, wenn ein Spieler gewinnt.

In diesem Lernprogramm erfahren Sie, wie Sie:

  • Lassen Sie Paare sichtbar.
  • Überprüfen Sie, ob ein Spieler gewonnen hat.
  • Probieren Sie andere Features aus.

Voraussetzungen

Dieses Lernprogramm baut auf diesen vorherigen Lernprogrammen auf:

  1. Erstellen einer übereinstimmenden Spielanwendung
  2. Hinzufügen von Symbolen zu Ihrem passenden Spiel
  3. Hinzufügen eines Timers in Ihrem passenden Spiel

Lassen Sie Paare sichtbar

Wenn ein Spielender ein Paar richtig zuordnet, sollte das Spiel sich selbst zurücksetzen, damit es keine Bezeichnungen mehr nachverfolgt, die die Verweisvariablen firstClicked und secondClicked verwenden. Es sollte nicht die Farben für die beiden Beschriftungen zurücksetzen, die übereinstimmten. Diese Bezeichnungen werden weiterhin angezeigt.

  1. Fügen Sie der label_Click()-Ereignishandlermethode die folgende if-Anweisung hinzu. Platzieren Sie ihn am Ende des Codes direkt über der Anweisung, in der Sie den Timer starten.
        // 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 clicked two matching icons, keep them 
        // black and reset firstClicked and secondClicked 
        // so the player can click another icon
        if (firstClicked.Text == secondClicked.Text)
        {
            firstClicked = null;
            secondClicked = null;
            return;
        }

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

Die if-Anweisung überprüft, ob das Symbol in der ersten Beschriftung, die der Spieler auswäht, mit dem Symbol in der zweiten Beschriftung identisch ist. Wenn die Symbole gleich sind, führt das Programm seine drei Anweisungen aus. Die ersten beiden Anweisungen setzen die firstClicked und secondClicked Referenzvariablen zurück. Sie verfolgen keine der Bezeichnungen mehr nach. Die dritte Anweisung ist eine return-Anweisung, die die restlichen Anweisungen in der Methode überspringt, ohne sie auszuführen.

  1. Führen Sie das Programm aus, und beginnen Sie dann mit der Auswahl von Quadraten im Formular.

Screenshot des Zuordnungsspiels, das Sie in diesem Tutorial erstellen.

Wenn Sie ein Paar auswählen, das nicht übereinstimmt, wird das Tick-Ereignis des Timers ausgelöst. Beide Symbole werden ausgeblendet.

Wenn Sie ein übereinstimmendes Paar auswählen, wird die neue if-Anweisung ausgeführt. Die Return-Anweisung bewirkt, dass die Methode den Code überspringt, der den Timer startet. Die Symbole bleiben sichtbar.

Überprüfen, ob ein Spieler gewonnen hat

Sie haben ein lustiges Spiel erstellt. Nach dem Sieg eines Spielers sollte das Spiel beendet werden. In diesem Abschnitt wird eine Methode hinzugefügt, um zu überprüfen, ob der Spieler gewonnen hat.

  1. Fügen Sie unten im Code unter dem timer1_Tick() Ereignishandler eine CheckForWinner() Methode hinzu.
/// <summary>
/// Check every icon to see if it is matched, by 
/// comparing its foreground color to its background color. 
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
    // Go through all of the labels in the TableLayoutPanel, 
    // checking each one to see if its icon is matched
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }

    // If the loop didn’t return, it didn't find
    // any unmatched icons
    // That means the user won. Show a message and close the form
    MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

Die Methode verwendet eine weitere foreach-Schleife in C# oder eine For Each-Schleife in Visual Basic, um jede Beschriftung in der TableLayoutPanelzu durchlaufen. Es überprüft die Symbolfarbe der einzelnen Bezeichnungen, um zu überprüfen, ob sie dem Hintergrund entspricht. Wenn die Farben übereinstimmen, bleibt das Symbol unsichtbar, und der Spieler hat nicht alle verbleibenden Symbole abgeglichen.

In diesem Fall verwendet das Programm eine return-Anweisung, um den Rest der Methode zu überspringen. Wenn die Schleife alle Beschriftungen durchläuft, ohne die return-Anweisung auszuführen, bedeutet dies, dass alle Symbole im Formular übereinstimmen. Das Programm zeigt eine MessageBox, um dem Spieler zum Sieg zu gratulieren, und ruft dann die Close() Methode auf, um das Spiel zu beenden.

  1. Legen Sie fest, dass der Click-Ereignishandler der Bezeichnung die neue CheckForWinner()-Methode aufruft.
// 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;

// Check to see if the player won
CheckForWinner();

// If the player clicked two matching icons, keep them 
// black and reset firstClicked and secondClicked 
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
    firstClicked = null;
    secondClicked = null;
    return;
}

Achten Sie darauf, dass Ihr Programm sofort danach nach einem Gewinner sucht, nachdem das zweite Symbol angezeigt wird, das der Spieler auswäht. Suchen Sie nach der Zeile, in der Sie die Farbe des zweiten ausgewählten Symbols festlegen, und rufen Sie dann die CheckForWinner() Methode direkt hinter dieser Zeile auf.

  1. Speichern sie das Programm, und führen Sie es aus. Spielen Sie das Spiel und passen Sie alle Symbole aneinander. Wenn Sie gewinnen, zeigt das Programm eine Glückwunsch-Nachricht an.

    Screenshot: Memory-Spiel mit einem MessageBox-Element

    Nachdem Sie OK ausgewählt haben, wird das Memory-Spiel geschlossen.

Probieren Sie andere Features aus

Ihr Memory-Spiel ist vollständig. Sie können weitere Features hinzufügen, um dieses Spiel anspruchsvoller und interessanter zu gestalten. Hier sind einige Optionen.

  • Ersetzen Sie die Symbole und Farben durch die Symbole, die Sie auswählen.

    Beschäftigen Sie sich mit der ForeColor-Eigenschaft der Bezeichnung.

  • Fügen Sie einen Spielzeitgeber hinzu, der verfolgt, wie lange es dauert, bis der Spieler gewinnt.

    Sie können eine Beschriftung hinzufügen, um die verstrichene Zeit im Formular anzuzeigen. Platzieren Sie sie über TableLayoutPanel. Fügen Sie dem Formular einen weiteren Timer hinzu, um die Zeit nachzuverfolgen. Verwenden Sie Code, um den Timer zu starten, wenn der Spieler das Spiel startet, und beenden Sie den Timer, nachdem sie mit den letzten beiden Symbolen übereinstimmen.

  • Fügen Sie einen Sound hinzu, wenn der Spieler eine Übereinstimmung findet, ein weiterer Sound, wenn der Spieler zwei Symbole aufdeckt, die nicht übereinstimmen, und einen dritten Sound, wenn das Programm die Symbole wieder ausblendet.

    Um Sounds wiederzugeben, können Sie den System.Media Namespace verwenden. Weitere Informationen finden Sie unter Wiedergeben von Sounds in der Windows Forms-App (C#) oder Wiedergeben von Audio in Visual Basic.

  • Machen Sie das Spiel schwieriger, indem Sie das Brett vergrößern.

    Sie müssen mehr tun, als nur Zeilen und Spalten zum TableLayoutPanel hinzuzufügen. Sie müssen auch die Anzahl der symbole berücksichtigen, die Sie erstellen.

  • Machen Sie das Spiel schwieriger, indem Sie das erste Symbol ausblenden, wenn der Spieler zu langsam reagiert.

Nächste Schritte

Glückwunsch! Sie haben diese Tutorial-Reihe abgeschlossen. Sie haben diese Programmier- und Entwurfsaufgaben in der Visual Studio-IDE ausgeführt:

  • Gespeicherte Objekte, z. B. Symbole, in einer Liste
  • Verwenden einer Schleife in C# oder Visual Basic zum Durchlaufen einer Liste
  • Nachverfolgen des Zustands mithilfe von Referenzvariablen
  • Erstellt einen Ereignishandler, um auf Ereignisse für mehrere Objekte zu reagieren
  • Es wurde ein Timer hinzugefügt, der nach unten zählt und ein Ereignis auslöst.

Wechseln Sie zu diesem Artikel, um einen umfassenden Einblick in den Windows Forms-Designer zu erfahren.