Wände
Teil des Abschnitts Projekte der Pygame-Journey von Coddy. Lektion 8 von 31.
Das Spiel endet, wenn der Kopf das Spielfeld verlassen würde. Eine Zelle liegt auf dem Spielfeld, wenn ihre Spalte zwischen 0 und COLS - 1 und ihre 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 von 0 an nummeriert, daher liegt Spalte COLS bereits außerhalb des Spielfeldrands.
Prüfe das, bevor du dich bewegst. Der Kopf verlässt das Spielfeld nie, und sobald alive false ist, bleibt die Schlange an ihrer Position. Zeige Game over zentriert bei (240, 180) an, solange es false ist.
Aufgabe
Mittel- Setze
alive = Truevor der Schleife. - Führe den gesamten Zug innerhalb von
if alive:aus. Berechnexundy; wenn diese Zelle außerhalb des Spielfelds liegt, setzealive = False, andernfalls füge sie wie zuvor ein, friss oder entferne das letzte Segment. - Wenn
alivefalse 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 Projekte
Übe selbstständig: Pygame-Playground