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 vorbeiDer Aktualisierungscode steht weiterhin unter if state == "play":, sodass sich nichts bewegt, solange das Menü angezeigt wird.
Aufgabe
Einfach- Beginne mit
state = "menu". - Setze im Ereignisloop den Zustand auf
"play", wenn die Eingabetaste gedrückt wird und der Zustand"menu"ist. - Zeichne, solange der Zustand
"menu"ist, auf dem dunklen Hintergrund nurMeteor Dodgezentriert bei (240, 140) undPress Enter to playzentriert bei (240, 200). - 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()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spielregeln
1Spielzustände
Eine ZustandsvariableEin MenübildschirmDrücke R, um erneut zu spielenEine Reset-FunktionEine Funktion pro ZustandÜbe selbstständig: Pygame-Playground