Wände
Lektion 26 von 40 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
Mittel- Setze
alive = Truevor der Schleife. - Führe den gesamten Zug unter
if alive:aus. Berechnexundy; wenn sich dieses Feld außerhalb des Spielfelds befindet, setzealive = False, andernfalls füge es wie zuvor ein, friss oder entferne das letzte Segment. - Wenn
alivefalsch ist, zeigeGame overzentriert 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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spiele mit Pygame erstellen
Übe selbstständig: Pygame-Playground