Menu
CoddyTech

Eine Liste von Körperteilen

Lektion 23 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.

Die Schlange ist eine Liste von Zellen, mit dem Kopf zuerst:

body = [(5, 9), (4, 9), (3, 9)]

Um dich zu bewegen, füge vorne den neuen Kopf hinzu und entferne die letzte Zelle. Jede Zelle dazwischen bleibt an ihrer Stelle, sodass der Körper dem Kopf folgt:

x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
body.pop()

body.insert(0, item) setzt das Element an Index 0. body.pop() entfernt das letzte Element. body[0] ist der Kopf und body[1:] ist der Rest.

Zeichne den Rest in einem dunkleren Grün und den Kopf zuletzt, damit er oben liegt.

challenge icon

Aufgabe

Einfach

Gib der Schlange einen Körper, der dem Kopf folgt.

  1. Ersetze head = (5, 9) durch body = [(5, 9), (4, 9), (3, 9)].
  2. Berechne in jedem Frame den neuen Kopf (x, y) anhand von body[0], füge ihn vorne ein und entferne das Ende.
  3. Zeichne jede Zelle von body[1:] in (120, 220, 120), dann body[0] in (180, 255, 160).

Drücke auf „Spielen“: Eine drei Zellen lange Schlange gleitet über den Bildschirm. Drücke dann auf „Prüfen“.

Probier es selbst

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()


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


head = (5, 9)
direction = (1, 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

    head = (head[0] + direction[0], head[1] + direction[1])

    screen.fill((30, 30, 46))
    draw_cell(head, (180, 255, 160))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground