Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Completa Cielo notturno:

  1. Aggiungi una stella al clic solo mentre len(stars) < 20.
  2. Quando len(stars) == 20, mostra The 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