TOC

This article has been localized into German by the community.

Erstellen eines Spiels: SnakeWPF:
Chapter introduction:

In this article series, we're building a complete Snake game from scratch. It makes sense to start with the Introduction and then work your way through the articles one by one, to get the full understanding.

If you want to get the complete source code for the game at once, to get started modifying and learning from it right now, consider downloading all our samples!

Die Schlange kontrollieren

Zu diesem Zeitpunkt in unserer Artikelserie über SnakeWPF haben wir jetzt einen gut aussehenden Hintergrund und eine sich bewegende Schlange. Leider bewegt sich die Schlange nur in eine Richtung, bis sie das Gebiet verlässt. Wir müssen natürlich etwas Code hinzufügen, damit wir die Schlange mit der Tastatur steuern können.

Die meisten WPF-Steuerelemente verfügen über Ereignisse zum Empfangen von Eingaben von Maus und Tastatur. Je nachdem, wo Sie die Eingabe überprüfen möchten, können Sie diese Ereignisse für ein oder mehrere Steuerelemente abonnieren und dann die Magie dort ausführen. Da es sich jedoch um ein Spiel handelt, möchten wir Tastatureingaben erfassen, unabhängig davon, wo sich der Fokus befindet. Deshalb abonnieren wir das Ereignis einfach direkt im Fenster.

Für das, was wir erreichen wollen, ist das KeyUp -Ereignis eine großartige Ergänzung. Suchen Sie also Ihre XAML-Datei für das Fenster und ändern Sie das Window-Tag so, dass es das KeyUp-Ereignis wie folgt enthält:

<Window x:Class="WpfTutorialSamples.Games.SnakeWPFSample"  
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
xmlns:local="clr-namespace:WpfTutorialSamples.Games"  
mc:Ignorable="d"  
Title="SnakeWPF - Score: 0" SizeToContent="WidthAndHeight"
ContentRendered="Window_ContentRendered" KeyUp="Window_KeyUp">

Fügen Sie in Ihrem Code-Behind die Ereignisbehandlungsroutine Window_KeyUp wie folgt hinzu:

private void Window_KeyUp(object sender, KeyEventArgs e)
{
    SnakeDirection originalSnakeDirection = snakeDirection;
    switch(e.Key)
    {        
case Key.Up:
    if(snakeDirection != SnakeDirection.Down)
snakeDirection = SnakeDirection.Up;
    break;
case Key.Down:
    if(snakeDirection != SnakeDirection.Up)
snakeDirection = SnakeDirection.Down;
    break;
case Key.Left:
    if(snakeDirection != SnakeDirection.Right)
snakeDirection = SnakeDirection.Left;
    break;
case Key.Right:
    if(snakeDirection != SnakeDirection.Left)
snakeDirection = SnakeDirection.Right;
    break;
case Key.Space:
    StartNewGame();
    break;
    }
    if(snakeDirection != originalSnakeDirection)
MoveSnake();
}

Das erste, was wir tun, ist, einen Verweis auf die aktuelle Richtung zu speichern, in die sich die Schlange bewegt. Dies ist erforderlich, um sicherzustellen, dass der Spieler nicht versucht, etwas zu tun, das wir nicht zulassen (Zum Beispiel von rechts nach links). Mit anderen Worten, wenn sich die Schlange vertikal bewegt und der Spieler die Richtung ändern möchte, muss sie zuerst horizontal gehen - Sie können nicht direkt von oben nach unten oder von links nach rechts gehen.

Als Nächstes sehen Sie in einer switch -Anweisung, welche Taste gedrückt wurde. Hier prüfen wir, ob eine der Pfeiltasten (Hoch, Runter, Links, Rechts) gedrückt wurde - wenn ja dürfen Sie also die Richtung der Schlange ändern, es sei denn, die Änderung ist physikalisch unmöglich, wie oben beschrieben. Beachten Sie auch, dass ich ein Häkchen für die Leertaste eingefügt habe: Sie ruft die StartNewGame() -Methode auf, damit der Spieler auswählen kann, wann das Spiel gestartet wird, anstatt es nur automatisch zu starten. Außerdem kann der Spieler ein neues Spiel starten, wenn das vorherige Spiel beendet ist.

Am Ende der Methode prüfen wir, ob sich die Richtung im Vergleich zur ursprünglichen Richtung geändert hat. Wenn dies der Fall ist, rufen wir die Methode MoveSnake() auf, damit die Änderung sofort wirksam wird.

Wir haben zuvor der StartNewGame() -Methode im Window_ContentRendered -Ereignis einen Aufruf hinzugefügt. Sie können diesen jetzt entfernen und das Spiel stattdessen durch Drücken der Leertaste starten. Nun, siehe da, die Schlange kann gesteuert werden - sie ist jetzt fast ein echtes Spiel und nicht nur eine animierte Schlange!

Zusammenfassung

In diesem Artikel haben wir unserer SnakeWPF-Implementierung einige wichtige Funktionen hinzugefügt: Steuerung der Schlange! Wenn Sie jedoch versuchen, es zu spielen, werden Sie feststellen, dass wir noch einen sehr wichtigen Aspekt benötigen, da die Schlange derzeit aus den Wandgrenzen verschwindet und sich weigert, das Essen zu essen, selbst wenn Sie darauf treffen. Mit anderen Worten, wir müssen eine Kollisionserkennung hinzufügen! Mehr dazu im nächsten Artikel.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!