Menu
CoddyTech

Eine Reset-Funktion

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

Du spielst ein Spiel, erzielst ein paar Punkte, verlierst und drückst R. Das neue Spiel beginnt mit dem alten Punktestand. Jeder Wert, den ein Spiel ändert, muss auf seinen Startwert zurückgesetzt werden, und einer wird oft vergessen.

Lege alle Startwerte in eine Funktion und rufe sie sowohl vor dem ersten Spiel als auch beim Drücken von R auf:

def reset():
    global player, rock, score
    player = pygame.Rect(220, 300, 40, 40)
    rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
    score = 0


reset()

Die Zeile global ist wichtig. Eine Variable, der du innerhalb einer Funktion einen Wert zuweist, gehört zu dieser Funktion, sofern du nichts anderes angibst. Ohne global würde score = 0 eine neue lokale Variable score erzeugen, die verschwindet, wenn die Funktion endet, und der Punktestand des Spiels würde sich nicht ändern.

Jetzt wird der Start eines Spiels nur einmal festgelegt. Wenn du später einen Wert hinzufügst, etwa Leben, fügst du ihn an einer Stelle hinzu, und sowohl das erste Spiel als auch jedes neue Spiel erhalten ihn.

challenge icon

Aufgabe

Mittel
  1. Schreibe reset(), das player, rock und score auf ihre Startwerte setzt, wobei global player, rock, score die erste Zeile ist.
  2. Rufe reset() einmal vor der Schleife auf, anstelle der drei Zeilen, die diese Werte setzen.
  3. Rufe bei R reset() auf und setze den Zustand auf "play".

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 = "menu"

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RETURN and state == "menu":
                state = "play"
            if event.key == pygame.K_r and state == "over":
                player.x = 220
                rock.y = -24
                rock.x = random.randint(0, 456)
                state = "play"

    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))
    if state == "menu":
        title = font.render("Meteor Dodge", True, (240, 240, 240))
        screen.blit(title, title.get_rect(center=(240, 140)))
        hint = font.render("Press Enter to play", True, (240, 240, 240))
        screen.blit(hint, hint.get_rect(center=(240, 200)))
    else:
        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)))
            hint = font.render("Press R to play again", True, (240, 240, 240))
            screen.blit(hint, hint.get_rect(center=(240, 200)))
    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