Wände
Lektion 26 von 41 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 zuvorBeachte 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.
Aufgabe
MittelBeende das Spiel, wenn die Schlange gegen eine Wand stößt.
- Setze
alive = Truevor der Schleife und platziere den Zug unterif alive:. - Wenn die neue Zelle
(x, y)außerhalb des Spielfelds liegt, setzealive = False; andernfalls füge sie wie zuvor ein, friss oder entferne das letzte Segment. - Wenn
alivefalsch ist, zeigeGame overzentriert bei(240, 180)an.
Drücke „Spielen“ und stoße gegen eine Wand: „Game over“ wird angezeigt und die Schlange hält an. Drücke dann „Prüfen“.
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()
Alle Lektionen in Spiele mit Pygame erstellen
Übe selbstständig: Pygame-Playground