Wie erstelle ich ein Snake-Spiel in Python?

Wenn Sie gerne das Schlangenspiel spielen, bin ich sicher, dass Sie diesen Artikel interessant finden werden.

In diesem Artikel werde ich Ihnen beibringen, wie Sie ein einfaches Snake-Spiel entwickeln, das selbst ein Anfänger in Python leicht entwickeln kann.

Es gibt eine Reihe von Möglichkeiten, dieses Spiel zu erstellen, und eine beinhaltet die Verwendung der PyGame-Bibliothek von Python, einer Python-Bibliothek, die wir zum Erstellen von Spielen verwenden.

Der andere Weg ist die Nutzung der Turtle-Bibliothek. Dieses Modul ist mit Python vorinstalliert und bietet Benutzern eine virtuelle Leinwand zum Erstellen von Formen und Bildern.

Daher wird dieser Artikel die Turtle-Bibliothek verwenden, um unser einfaches Snake-Spiel zu implementieren, das besonders für Anfänger von Python-Entwicklern anfängerfreundlich ist.

Zusätzlich zu diesem Modul werden wir auch zwei andere Module verwenden, nämlich;

  • Zeitmodul – Mit dieser Methode können wir die Anzahl der Sekunden verfolgen, die seit dem letzten Mal vergangen sind.
  • Zufallsmodul – Es generiert Zahlen zufällig in Python.

Andere grundlegende Werkzeuge, die Sie verwenden müssen, sind ein Texteditor Ihrer Wahl. Ich werde VSCode in diesem Artikel verwenden. Natürlich müssen Sie Python 3 auf Ihrem Computer installieren, falls Sie es noch nicht haben. Sie können auch den wdzwdz-Compiler verwenden.

Das sollte Spaß machen!

Wie das Schlangenspiel funktioniert

Das ultimative Ziel dieses Spiels ist es, dass der Spieler die höchste Punktzahl erreicht, indem er die Schlange steuert, um das Essen zu sammeln, das auf dem Bildschirm angezeigt wird.

Der Spieler steuert die Schlange mit vier Richtungstasten, die relativ zu der Richtung sind, in die sich die Schlange bewegt. Sollte die Schlange einen Block oder sich selbst treffen, verliert der Spieler das Spiel.

Die folgenden Schritte werden wir befolgen, um dieses Spiel zu implementieren.

  • Importieren der vorinstallierten Module (Schildkröte, Zeit und Zufall) in unsere Programme.
  • Erstellen der Bildschirmanzeige des Spiels mit dem Turtle-Modul.
  • Festlegen der Tasten für die Bewegungsrichtung der Schlange auf dem Bildschirm.
  • Die Gameplay-Umsetzung.

Erstellen Sie eine Datei snakegame.py, in der wir den Implementierungscode hinzufügen.

  Lohnt sich der Kauf von Kameraobjektiv-Add-Ons für Smartphones?

Importieren der Module

Dieser Teil des Codes importiert die Schildkröten-, Zeit- und Zufallsmodule, die standardmäßig in Python vorinstalliert sind. Außerdem werden wir dann Standardwerte für die anfängliche Punktzahl des Spielers, die höchste Punktzahl, die der Spieler erreichen wird, und die Verzögerungszeit festlegen, die der Spieler bei jedem Zug benötigt. Das Zeitmodul wird hier verwendet, um die Verzögerungszeit zu berechnen.

Fügen Sie Ihrer Datei snakegame.py den folgenden Code hinzu.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Erstellen der Bildschirmanzeige des Spiels

Das Turtle-Modul, das wir hier importieren, ermöglicht es uns, eine virtuelle Leinwand zu erstellen, die der Fensterbildschirm des Spiels sein wird. Von hier aus können wir den Körper der Schlange und das Essen, das die Schlange sammeln wird, erschaffen. Unser Bildschirm zeigt auch die aufgezeichnete Punktzahl des Spielers an.

Fügen Sie diesen Code der Python-Datei hinzu.

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice('triangle','circle')
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

Das obige Code-Snippet beginnt mit der Initialisierung des Turtle-Bildschirms und übergibt einen Titel und eine Hintergrundfarbe an den Bildschirm. Nachdem wir die Fenstergröße unseres Bildschirms definiert haben, zeichnen wir die Form der Schlange auf der virtuellen Leinwand.

Die Methode penup() nimmt einfach den Stift der Schildkröte auf, sodass keine Linie gezeichnet wird, wenn sich die Schildkröte bewegt. Die goto(x,y)-Methode enthält Koordinatenpositionen, die die Schildkröte an eine absolute Position bewegen.

Wir stellen dann die Nahrung her, die die Schlange sammelt. Wir möchten die Punktzahl des Spielers jedes Mal anzeigen, wenn die Schlange das Essen sammelt, und die höchste Punktzahl, die der Spieler während des Spiels erreicht. Daher verwenden wir die Methode pen.write(), um dies zu implementieren. Das hideturtle() verbirgt das Schildkrötensymbol auf dem Bildschirm im Kopfbereich, in dem dieser Text geschrieben ist.

Es ist wichtig, das turtle.mainloop() am Ende Ihres Codes hinzuzufügen, wodurch der Bildschirm länger angezeigt wird, damit Sie als Benutzer etwas auf dem Bildschirm tun können.

  Wann lohnt sich der Kauf eines 8K-Fernsehers?

Führen Sie die Datei aus und Sie sollten die folgende Ausgabe haben:

Einrichten der Richtungstasten für die Schlange

Hier richten wir bestimmte Tasten ein, die die Richtung bestimmen, in die sich die Schlange auf dem Bildschirm bewegt. Wir verwenden das ‚L‘ für links, ‚R‘ für rechts, ‚U‘ für oben, ‚D‘ für unten. Wir werden diese Anweisungen mit der Richtungsfunktion der Schildkröte implementieren, die wir für die Schlange aufrufen werden.

Fügen Sie Ihrem Code das folgende Code-Snippet hinzu.

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

Die obige Funktion move() setzt die Bewegung der Schlange in die definierte Position innerhalb eines genauen Koordinatenwertes.

Die Funktion listen() ist ein Ereignis-Listener, der die Methoden aufruft, die die Schlange in eine bestimmte Richtung bewegen, wenn der Spieler die Taste drückt.

Die Gameplay-Implementierung des Schlangenspiels

Nachdem wir die grundlegende Perspektive unseres Snake-Spiels festgelegt haben, müssen wir das Spiel in Echtzeit machen.

Dies wird Folgendes beinhalten:

  • Erhöhen Sie die Länge der Schlange jedes Mal, wenn sie das Futter sammelt, indem Sie vorzugsweise eine andere Farbe verwenden.
  • Erhöhen Sie die Punktzahl des Spielers jedes Mal, wenn die Schlange das Essen sammelt, und verfolgen Sie die höchste Punktzahl.
  • Der Spieler kann verhindern, dass die Schlange mit der Wand oder seinem eigenen Körper kollidiert.
  • Das Spiel beginnt neu, wenn die Schlange kollidiert.
  • Die Punktzahl des Spielers wird auf Null zurückgesetzt, wenn das Spiel neu gestartet wird, während der Bildschirm die höchste Punktzahl des Spielers behält.

Fügen Sie den Rest dieses Codes zu Ihrer Python-Datei hinzu.

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            # Adding segment
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

Im obigen Codeausschnitt legen wir eine zufällige Position für das Futter der Schlange innerhalb des Bildschirms fest. Jedes Mal, wenn die Schlange diese Nahrung sammelt, vergrößert sich ihr Körpersegment mit einer anderen Farbe; weiß, in diesem Fall, um sein Wachstum zu unterscheiden.

  So erstatten Sie ein GOG-Spiel

Nachdem die Schlange das Futter gesammelt hat, ohne zu kollidieren, wird das Futter auf eine zufällige Position innerhalb des 270-Koordinatenbereichs der Bildschirmgröße gesetzt. Jedes Mal, wenn die Schlange Nahrung sammelt, erhöht sich die Punktzahl des Spielers um 5. Wenn die Schlange kollidiert, wird die Punktzahl des Spielers auf 0 gesetzt, während der Bildschirm seine höchste Punktzahl behält.

Geben Sie nun die Python-Datei zurück und Sie sollten Ihren Turtle-Bildschirm so sehen:

Fazit 🐍

Die Verwendung der Schildkrötenbibliothek ist eine unterhaltsame und einfache Möglichkeit, das Schlangenspiel zu erstellen, wie wir in diesem Artikel gesehen haben. Alternativ könnten Sie dasselbe mit der PyGame-Bibliothek implementieren. Sie können die überprüfen PyGame-Tutorial hier und sehen, wie Sie das Spiel anders implementieren könnten.

Sie können auch ein Zahlenratespiel in Python ausprobieren oder erfahren, wie Sie JSON-Daten in Python erhalten.
Viel Spaß beim Codieren!