Menu
CoddyTech

Level

Lektion 28 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.

Alle 5 Futterstücke erreicht die Schlange ein neues Level und bewegt sich schneller. Das Level ergibt sich aus dem Punktestand: Die ganzzahlige Division score // 5 ergibt bei Punkteständen von 0 bis 4 den Wert 0, bei 5 bis 9 den Wert 1 und so weiter.

level = score // 5 + 1
clock.tick(8 + 2 * level)

Die Schlange bewegt sich pro Frame um ein Feld. Je mehr Frames pro Sekunde, desto schneller ist die Schlange: 10 Schritte pro Sekunde auf Level 1, 12 auf Level 2, 14 auf Level 3.

Wer 15 Futterstücke erreicht, gewinnt. Das Spiel wird beendet, wenn alive and score < 15 falsch ist, und zeigt You win! an.

challenge icon

Aufgabe

Schwer
  1. Setze bei jedem Frame level = score // 5 + 1 und zeige f"Level: {level}" bei (370, 6) an.
  2. Lass die Uhr mit 8 + 2 * level Frames pro Sekunde ticken.
  3. Bewege dich nur, solange alive and score < 15 gilt, und zeige You win! bei einem Punktestand von 15 zentriert 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
alive = True

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

    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 or (x, y) in body[:-1]:
            alive = False
        else:
            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))
    if not alive:
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 180)))
    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