Menu
CoddyTech

Essen

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

Das Futter erscheint in einer zufälligen Zelle, niemals auf der Schlange. Wähle eine zufällige Zelle und versuche es erneut, solange sie auf dem Körper liegt:

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

random.randrange(COLS) ist eine ganze Zahl von 0 bis COLS - 1: jede Spalte, aber niemals eine jenseits des Randes. return beendet die Funktion und damit auch die Schleife, sobald eine freie Zelle gefunden wird.

cell not in body prüft die gesamte Liste auf einmal.

challenge icon

Aufgabe

Einfach

Platziere Futter auf dem Raster.

  1. Füge oben import random und wie oben beschrieben unter draw_cell new_food(body) hinzu.
  2. Setze nach direction food = new_food(body).
  3. Zeichne nach dem Füllen das Futter in Rot (235, 80, 80).

Drücke auf „Spielen“: Irgendwo außerhalb der Schlange erscheint eine rote Zelle. 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))


body = [(5, 9), (4, 9), (3, 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

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

    screen.fill((30, 30, 46))
    for cell in body[1:]:
        draw_cell(cell, (120, 220, 120))
    draw_cell(body[0], (180, 255, 160))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground