Menu
CoddyTech

Usuń gwiazdę

Część sekcji Python w oknie gry ścieżki Pygame w Coddy. Lekcja 27 z 32.

Listy też się kurczą. stars.pop() usuwa ostatni element, czyli najnowszy. stars.pop(0) usuwa pierwszy. stars.remove(item) usuwa pierwszy element równy item.

Usunięcie elementu z pustej listy powoduje błąd: IndexError: pop from empty list, a program się zatrzymuje. Najpierw sprawdź długość:

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

Zwróć uwagę na dwa if. Zewnętrzny wybiera z zdarzeń naciśnięcie spacji, a wewnętrzny upewnia się, że jest gwiazda do usunięcia.

W instrukcji if pusta lista jest traktowana jako False, a lista zawierająca elementy jako True, więc if stars: oznacza to samo co if len(stars) > 0:.

challenge icon

Wyzwanie

Średni

Niech spacja usuwa gwiazdkę:

  1. W pętli zdarzeń, gdy pojawi się zdarzenie KEYDOWN dla K_SPACE, usuń najnowszą gwiazdkę za pomocą stars.pop().
  2. Usuwaj element tylko wtedy, gdy lista nie jest pusta, aby naciśnięcie spacji, gdy nie ma gwiazdek, nic nie robiło.

Spróbuj swoich sił

import pygame

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

# Przygotuj wszystko tutaj, przed pętlą gry.
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)

    # Wprowadzaj zmiany tutaj, raz na klatkę.

    screen.fill((20, 24, 48))
    # Rysuj tutaj, po wypełnieniu ekranu.
    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()

Wszystkie lekcje w sekcji Python w oknie gry

Poćwicz samodzielnie: Edytor online Pygame