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 cellrandom.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.
Aufgabe
EinfachPlatziere Futter auf dem Raster.
- Füge oben
import randomund wie oben beschrieben unterdraw_cellnew_food(body)hinzu. - Setze nach
directionfood = new_food(body). - 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