Schlangen-Spiel mit Python und Pygame

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Projekt wird Ihnen den Prozess des Erstellens eines Snake-Spiels mit Python und der Pygame-Bibliothek beibringen. Das Spiel wird ein Spielfenster, eine Schlange, einen Power-Up und einen Score haben. Die Schlange wird sich im Spielfenster bewegen und den Power-Up aufessen. Wenn die Schlange den Power-Up aufisst, wird die Länge der Schlange um eins erhöht. Der Score wird auf dem Bildschirm angezeigt.

👀 Vorschau

Snake game preview screenshot

🎯 Aufgaben

In diesem Projekt lernen Sie:

  • Wie man ein Spielfenster mit Pygame erstellt
  • Wie man Benutzereingaben verarbeitet, um die Bewegung der Schlange zu steuern
  • Wie man die Position der Schlange erstellt und aktualisiert
  • Wie man die Schlange und den Power-Up auf dem Bildschirm zeichnet
  • Wie man Kollisionen zwischen der Schlange und dem Power-Up erkennt
  • Wie man den Score verfolgt
  • Wie man den Score auf dem Bildschirm anzeigt

🏆 Errungenschaften

Nach Abschluss dieses Projekts werden Sie in der Lage sein:

  • Mit Pygame ein grafisches Spielfenster zu erstellen
  • Benutzereingaben zu verarbeiten, um das Spiel zu steuern
  • Spieleobjekte zu erstellen und zu aktualisieren
  • Kollisionen in einem Spiel zu erkennen
  • Den Spielscore anzuzeigen und zu aktualisieren

Erstellen Sie die Projekt-Dateien

Erstellen Sie eine neue Datei mit dem Namen snake_game.py und öffnen Sie sie in einem Code-Editor.

cd ~/project
touch snake_game.py
sudo pip install pygame
✨ Lösung prüfen und üben

Importieren Sie die erforderlichen Module

In der Datei snake_game.py importieren Sie die Module pygame und random:

import pygame
import random
✨ Lösung prüfen und üben

Initialisieren Sie Pygame

Nachdem die Module importiert wurden, initialisieren Sie Pygame:

pygame.init()
✨ Lösung prüfen und üben

Einrichten des Spielfensters

Definieren Sie die Breite, Höhe und die Bilder pro Sekunde (Frames per Second, FPS) des Spielfensters:

WIDTH = 800
HEIGHT = 600
FPS = 10
✨ Lösung prüfen und üben

Definieren von Farben

Definieren Sie die Farben, die im Spiel verwendet werden:

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BACKGROUND_COLOR = (50, 50, 50)
✨ Lösung prüfen und üben

Einrichten des Spielfensters

Richten Sie das Spielfenster mit der definierten Breite und Höhe ein:

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()

In dem obigen Code wird pygame.display.set_mode() verwendet, um die Anzeige mit der angegebenen Breite und Höhe zu initialisieren. pygame.display.set_caption() wird verwendet, um den Titel des Spielfensters festzulegen. pygame.time.Clock() wird verwendet, um die Zeit im Spiel zu verfolgen.

✨ Lösung prüfen und üben

Einrichten der Schlange

Definieren Sie die Blöckeinheit und die Geschwindigkeit der Schlange:

snake_block_size = 20
snake_speed = 5

Wir setzen die Blöckeinheit auf 20 und die Geschwindigkeit auf 5. Dies bedeutet, dass sich die Schlange jeweils um 5 Pixel bewegt.

✨ Lösung prüfen und üben

Einrichten der Spielvariablen

Definieren Sie die Schriftarten und Schriftgrößen für die Anzeige des Scores:

font_style = pygame.font.SysFont(None, 50)
score_font = pygame.font.SysFont(None, 35)
✨ Lösung prüfen und üben

Einrichten der Power-Ups

Definieren Sie die Blöckeinheit der Power-Ups:

powerup_block_size = 20
✨ Lösung prüfen und üben

Definieren von Funktionen

Definieren Sie die folgenden Funktionen:

draw_snake(snake_block_size, snake_list)

Diese Funktion zeichnet die Schlange auf dem Bildschirm:

def draw_snake(snake_block_size, snake_list):
    for x in snake_list:
        pygame.draw.rect(
            screen, GREEN, [x[0], x[1], snake_block_size, snake_block_size]
        )

In dem obigen Code wird pygame.draw.rect() verwendet, um ein Rechteck auf dem Bildschirm zu zeichnen. Der erste Parameter ist der Bildschirm, der zweite Parameter ist die Farbe und der dritte Parameter ist die Position und Größe des Rechtecks.

draw_powerup(powerup_x, powerup_y)

Diese Funktion zeichnet das Power-Up auf dem Bildschirm:

def draw_powerup(powerup_x, powerup_y):
    pygame.draw.rect(
        screen, RED, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
    )

In dem obigen Code wird pygame.draw.rect() verwendet, um ein Rechteck auf dem Bildschirm zu zeichnen. Der erste Parameter ist der Bildschirm, der zweite Parameter ist die Farbe und der dritte Parameter ist die Position und Größe des Rechtecks.

display_score(score)

Diese Funktion zeigt den Score auf dem Bildschirm an:

def display_score(score):
    value = score_font.render("Score: " + str(score), True, WHITE)
    screen.blit(value, [10, 10])

In dem obigen Code wird score_font.render() verwendet, um den Score auf dem Bildschirm zu rendern. Der erste Parameter ist der Text, der angezeigt werden soll, der zweite Parameter ist die Antialiasing-Einstellung und der dritte Parameter ist die Farbe des Texts. screen.blit() wird verwendet, um den Text auf dem Bildschirm zu zeichnen. Der erste Parameter ist der Text, der angezeigt werden soll, und der zweite Parameter ist die Position des Texts.

game_loop()

Diese Funktion enthält die Hauptspielschleife:

def game_loop():
    ## Game loop code goes here
✨ Lösung prüfen und üben

Vollständigen Sie den Code der Spielschleife

Vervollständigen Sie die game_loop()-Funktion, indem Sie die Spiellogik innerhalb der while-Schleife hinzufügen.

def game_loop():
    game_over = False
    game_close = False

    ## Legen Sie die Startposition der Schlange fest
    x1 = WIDTH / 2
    y1 = HEIGHT / 2
    x1_change = 0
    y1_change = 0

    ## Legen Sie den Körper der Schlange fest
    snake_list = []
    snake_length = 1

    ## Legen Sie das Power-Up fest
    powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
    powerup_y = round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20

    ## Legen Sie die Spielschleife fest
    while not game_over:
        while game_close:
            screen.fill(BACKGROUND_COLOR)
            message = font_style.render("Press SPACE to play again", True, YELLOW)
            screen.blit(message, [WIDTH / 2 - 200, HEIGHT / 2 - 50])
            pygame.display.flip()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = True
                    game_close = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        game_loop()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block_size
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block_size
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block_size
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block_size
                    x1_change = 0

        if x1 >= WIDTH or x1 < 0 or y1 >= HEIGHT or y1 < 0:
            game_close = True

        x1 += x1_change
        y1 += y1_change
        screen.fill(BACKGROUND_COLOR)
        pygame.draw.rect(
            screen, BLUE, [powerup_x, powerup_y, powerup_block_size, powerup_block_size]
        )

        snake_head = []
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)
        if len(snake_list) > snake_length:
            del snake_list[0]

        for x in snake_list[:-1]:
            if x == snake_head:
                game_close = True

        draw_snake(snake_block_size, snake_list)
        display_score(snake_length - 1)

        pygame.display.flip()

        if x1 == powerup_x and y1 == powerup_y:
            powerup_x = round(random.randrange(0, WIDTH - powerup_block_size) / 20) * 20
            powerup_y = (
                round(random.randrange(0, HEIGHT - powerup_block_size) / 20) * 20
            )
            snake_length += 1

        clock.tick(snake_speed)

    pygame.quit()

In dem obigen Code wird pygame.QUIT verwendet, um das Spiel zu beenden. pygame.KEYDOWN wird verwendet, um zu überprüfen, ob eine Taste gedrückt wird. pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP und pygame.K_DOWN werden verwendet, um zu überprüfen, ob die Pfeiltasten nach links, rechts, oben und unten gedrückt werden, respectively. pygame.draw.rect() wird verwendet, um ein Rechteck auf dem Bildschirm zu zeichnen. Der erste Parameter ist der Bildschirm, der zweite Parameter ist die Farbe und der dritte Parameter ist die Position und Größe des Rechtecks. pygame.display.flip() wird verwendet, um den Bildschirm zu aktualisieren. pygame.time.Clock() wird verwendet, um die Zeit im Spiel zu verfolgen. pygame.time.Clock.tick() wird verwendet, um die FPS des Spiels festzulegen.

✨ Lösung prüfen und üben

Starte das Spiel

Fügen Sie am Ende der Datei Folgendes hinzu, um das Spiel zu starten:

game_loop()
pygame.quit()

Schließlich wechseln Sie zum Desktop und starten Sie das Projekt mit dem folgenden Befehl:

python snake_game.py
Snake game running command
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Sie haben erfolgreich ein Snake-Spiel mit Python und der Pygame-Bibliothek erstellt. In diesem Projekt haben Sie gelernt, wie Sie das Spielfenster einrichten, Farben definieren, die Schlange und das Power-Up zeichnen, den Score anzeigen und die Spiel-Logik implementieren. Sie können jetzt das Spiel starten und es genießen.