Menu
CoddyTech

Wände

Lektion 26 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.

Das Spiel endet, wenn der Kopf das Spielfeld verlassen würde. Ein Feld liegt auf dem Spielfeld, wenn seine Spalte zwischen 0 und COLS - 1 und seine Zeile zwischen 0 und ROWS - 1 liegt.

if alive:
    x = body[0][0] + direction[0]
    y = body[0][1] + direction[1]
    if x < 0 or x >= COLS or y < 0 or y >= ROWS:
        alive = False
    else:
        # einfügen, fressen oder entfernen, wie zuvor

Beachte x >= COLS, nicht x > COLS: Die Spalten sind ab 0 nummeriert, daher liegt Spalte COLS bereits außerhalb des Spielfeldrands.

Prüfe das, bevor du dich bewegst. Der Kopf verlässt niemals das Spielfeld, und sobald alive false ist, bleibt die Schlange an ihrer Position. Zeige Game over zentriert bei (240, 180) an, solange alive false ist.

challenge icon

Aufgabe

Mittel
  1. Setze alive = True vor der Schleife.
  2. Führe den gesamten Zug unter if alive: aus. Berechne x und y; wenn sich dieses Feld außerhalb des Spielfelds befindet, setze alive = False, andernfalls füge es wie zuvor ein, friss oder entferne das letzte Segment.
  3. Wenn alive falsch ist, zeige Game over zentriert bei (240, 180) an.

Probier es selbst

import random
import pygame

CELL = 20
COLS, ROWS = 24, 18
TURNS = {
    pygame.K_LEFT: (-1, 0),
    pygame.K_RIGHT: (1, 0),
    pygame.K_UP: (0, -1),
    pygame.K_DOWN: (0, 1),
}

pygame.init()
screen = pygame.display.set_mode((COLS * CELL, ROWS * CELL))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)


def draw_cell(cell, color):
    col, row = cell
    pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))


def new_food(body):
    while True:
        cell = (random.randrange(COLS), random.randrange(ROWS))
        if cell not in body:
            return cell


body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)
score = 0

running = True
while running:
    moving = direction
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key in TURNS:
            turn = TURNS[event.key]
            if turn != (-moving[0], -moving[1]):
                direction = turn

    x = body[0][0] + direction[0]
    y = body[0][1] + direction[1]
    body.insert(0, (x, y))
    if (x, y) == food:
        score += 1
        food = new_food(body)
    else:
        body.pop()

    screen.fill((30, 30, 46))
    draw_cell(food, (235, 80, 80))
    for cell in body[1:]:
        draw_cell(cell, (120, 220, 120))
    draw_cell(body[0], (180, 255, 160))
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (8, 6))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground