Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Lass die Schlange fressen und wachsen.

  1. Erstelle vor der Schleife font = pygame.font.Font(None, 32) und score = 0.
  2. 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.
  3. 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

Übe selbstständig: Pygame-Playground