Menu
CoddyTech

Einen Stern entfernen

Teil des Abschnitts Python in einem Spielfenster der Pygame-Journey von Coddy. Lektion 27 von 32.

Listen schrumpfen auch. stars.pop() entfernt das letzte Element, also das neueste. stars.pop(0) entfernt das erste. stars.remove(item) entfernt das erste Element, das gleich item ist.

Das Entfernen aus einer leeren Liste mit pop führt zu einem Fehler, IndexError: pop from empty list, und das Programm wird angehalten. Prüfe zuerst die Länge:

if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    if len(stars) > 0:
        stars.pop()

Beachte die beiden if-Anweisungen. Die äußere filtert das Drücken der Leertaste aus den Ereignissen heraus, die innere stellt sicher, dass ein Stern zum Entfernen vorhanden ist.

In einer if-Anweisung gilt eine leere Liste als False und eine Liste mit Elementen als True, daher bedeutet if stars: dasselbe wie if len(stars) > 0:.

challenge icon

Aufgabe

Mittel

Lass die Leertaste einen Stern zurücknehmen:

  1. Entferne in der Ereignisschleife den neuesten Stern mit stars.pop(), wenn ein KEYDOWN-Ereignis für K_SPACE eintrifft.
  2. Entferne einen Stern nur, wenn die Liste nicht leer ist, damit die Leertaste nichts bewirkt, wenn keine Sterne vorhanden sind.

Probier es selbst

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# Richte hier alles ein, bevor die Spielschleife beginnt.
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 10:
            stars.append(event.pos)

    # Ändere hier die Dinge einmal pro Frame.

    screen.fill((20, 24, 48))
    # Zeichne hier, nachdem der Bildschirm gefüllt wurde.
    for star in stars:
        pygame.draw.circle(screen, (255, 255, 255), star, 5)
    text = font.render(f"Stars: {len(stars)}", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Python in einem Spielfenster

Übe selbstständig: Pygame-Playground