Fressen und wachsen
Lektion 25 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.
Wenn der neue Kopf auf dem Futter landet, frisst die Schlange es. Das Wachsen ist der Zug, den du bereits hast, abzüglich einer Zeile: Bei einem Schritt, bei dem die Schlange frisst, überspringst du das Entfernen des letzten Elements, und der Schwanz bleibt erhalten.
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()Tupel vergleichen ihre Elemente der Reihe nach, daher ist (x, y) == food wahr, wenn sowohl die Spalte als auch die Zeile übereinstimmen.
Zeige den Punktestand wie zuvor an: eine vor der Schleife erstellte Schriftart und f"Score: {score}", das in jedem Frame bei (8, 6) gerendert wird.
Aufgabe
MittelLass die Schlange fressen und wachsen.
- Erstelle vor der Schleife
font = pygame.font.Font(None, 32)undscore = 0. - Füge nach dem Einfügen des neuen Kopfes, wenn er sich auf dem Futter befindet, 1 zur Punktzahl hinzu und platziere neues Futter; andernfalls entferne das Ende.
- Rendere
f"Score: {score}"in(240, 240, 240)und blitte es an(8, 6).
Drücke „Spielen“ und steuere die Schlange zum Futter: Sie wächst und die Punktzahl steigt. 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()
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()
Alle Lektionen in Spiele mit Pygame erstellen
3Raster und Listen
Ein Raster aus ZellenSchritt für SchrittÜbe selbstständig: Pygame-Playground