Menu
CoddyTech

Ein Menübildschirm

Teil des Abschnitts Spielregeln der Pygame-Journey von Coddy. Lektion 2 von 29.

Die meisten Spiele öffnen sich mit einem Menü: einem Titel und einer Zeile, die dir sagt, wie du startest. Ein Menü ist ein weiterer Zustand. Beginne mit state = "menu" und zeichne einen anderen Bildschirm, solange dieser Zustand aktiv ist.

Das Spiel zu starten erfordert einen Tastendruck, also lies ihn aus den Ereignissen aus. Ein KEYDOWN-Ereignis tritt bei jedem Tastendruck einmal auf, und event.key gibt an, welche Taste es war:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_RETURN and state == "menu":
        state = "play"

Der Teil state == "menu" ist wichtig: Eingabe bedeutet nur im Menü Start. Später bewirkt die Eingabetaste auf einem anderen Bildschirm nichts.

Auch das Zeichnen hängt jetzt vom Zustand ab:

screen.fill((30, 30, 46))
if state == "menu":
    # der Titel und „Enter drücken, um zu spielen“
else:
    # der Spieler, der Felsen, der Punktestand, Spiel vorbei

Der Aktualisierungscode steht weiterhin unter if state == "play":, sodass sich nichts bewegt, solange das Menü angezeigt wird.

challenge icon

Aufgabe

Einfach
  1. Beginne mit state = "menu".
  2. Setze im Ereignisloop den Zustand auf "play", wenn die Eingabetaste gedrückt wird und der Zustand "menu" ist.
  3. Zeichne, solange der Zustand "menu" ist, auf dem dunklen Hintergrund nur Meteor Dodge zentriert bei (240, 140) und Press Enter to play zentriert bei (240, 200).
  4. Andernfalls zeichne das Spiel wie zuvor.

Probier es selbst

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "play"

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if state == "play":
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            player.x -= 6
        if keys[pygame.K_RIGHT]:
            player.x += 6
        player.clamp_ip(screen.get_rect())

        rock.y += 4
        if rock.top > 360:
            rock.y = -24
            rock.x = random.randint(0, 456)
            score += 1
        if rock.colliderect(player):
            state = "over"

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 196, 0), player)
    pygame.draw.rect(screen, (235, 80, 80), rock)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    if state == "over":
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    pygame.display.flip()
    clock.tick(60)

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 Spielregeln

Übe selbstständig: Pygame-Playground