Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel
  1. Lege vor der Schleife font = pygame.font.Font(None, 32) und score = 0 an.
  2. 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.
  3. 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()
quiz iconTeste dich selbst

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