Un cielo pieno
Fa parte della sezione Python in una finestra di gioco del percorso Pygame di Coddy. Lezione 32 di 32.
Il gioco termina quando il cielo contiene venti stelle. Cambiano due cose: i clic smettono di aggiungere stelle e compare un messaggio che lo comunica. Entrambe leggono lo stesso elenco:
if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 20:
stars.append(event.pos)if len(stars) == 20:
message = font.render("The sky is full!", True, (230, 230, 240))
screen.blit(message, message.get_rect(center=(320, 240)))message.get_rect(center=(320, 240)) è il rettangolo dell'immagine del testo, posizionato con il centro in (320, 240). Disegnando il testo in quel punto, lo si colloca al centro della finestra, indipendentemente dalla sua lunghezza.
Qui verifica == 20, non > 20: il limite ferma l'elenco a 20, quindi non ne conterrà mai di più.
Con il cielo pieno, non resta altro da fare che guardarlo. La sezione 2 mostra come ricominciare una partita con un tasto e come terminare una partita con una vittoria o una sconfitta.
Sfida
MedioCompleta Cielo notturno:
- Aggiungi una stella al clic solo mentre
len(stars) < 20. - Quando
len(stars) == 20, mostraThe sky is full!in(230, 230, 240), centrata in (320, 240).
Provalo tu
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# Prepara tutto qui, prima del ciclo di gioco.
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:
stars.append(event.pos)
# Aggiorna gli elementi qui, una volta per fotogramma.
screen.fill((20, 24, 48))
# Disegna qui, dopo aver riempito lo schermo.
pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
for star in stars:
colour = (255, 255, 255)
if random.randint(1, 30) == 1:
colour = (110, 120, 170)
pygame.draw.circle(screen, colour, star, 3)
text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
screen.blit(text, (20, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tutte le lezioni di Python in una finestra di gioco
Esercitati da solo: Playground Pygame