Menu
CoddyTech

Wände

Teil des Abschnitts Projekte der Pygame-Journey von Coddy. Lektion 8 von 31.

Das Spiel endet, wenn der Kopf das Spielfeld verlassen würde. Eine Zelle liegt auf dem Spielfeld, wenn ihre Spalte zwischen 0 und COLS - 1 und ihre 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 von 0 an nummeriert, daher liegt Spalte COLS bereits außerhalb des Spielfeldrands.

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

challenge icon

Aufgabe

Mittel
  1. Setze alive = True vor der Schleife.
  2. Führe den gesamten Zug innerhalb von if alive: aus. Berechne x und y; wenn diese Zelle außerhalb des Spielfelds liegt, setze alive = False, andernfalls füge sie wie zuvor ein, friss oder entferne das letzte Segment.
  3. Wenn alive false 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 Projekte

Übe selbstständig: Pygame-Playground