Essen und wachsen
Lektion 25 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.
Wenn der neue Kopf auf dem Futter landet, frisst die Schlange es. Das Wachsen funktioniert wie die Bewegung, die du bereits hast, nur ohne eine Zeile: Überspringe bei einem Schritt, bei dem die Schlange frisst, das Entfernen des letzten Elements, und der Schwanz bleibt an seinem Platz.
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()Tupel werden Element für Element verglichen. Daher ist (x, y) == food wahr, wenn sowohl die Spalte als auch die Zeile übereinstimmen.
Zeige den Punktestand wie im letzten Spiel an: eine Schriftart, die vor der Schleife erstellt wird, und f"Score: {score}", das in jedem Frame bei (8, 6) gerendert wird.
Aufgabe
Mittel- Lege vor der Schleife
font = pygame.font.Font(None, 32)undscore = 0an. - Nachdem du den neuen Kopf eingefügt hast: Wenn er sich auf dem Futter befindet, erhöhe den Punktestand um 1 und platziere neues Futter; andernfalls entferne das Schwanzsegment.
- Rendere
f"Score: {score}"in(240, 240, 240)und blitte es bei(8, 6).
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()
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)
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))
draw_cell(food, (235, 80, 80))
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()
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
3Raster und Listen
Ein Raster aus ZellenSchritt für SchrittÜbe selbstständig: Pygame-Playground