Menu
CoddyTech

Un ciel rempli

Fait partie de la section Python dans une fenêtre de jeu du Journey Pygame de Coddy. Leçon 32 sur 32.

Le jeu se termine lorsque le ciel compte vingt étoiles. Deux choses changent : les clics cessent d’ajouter des étoiles et un message l’indique. Les deux consultent la même liste :

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)) est le rectangle de l’image du texte, positionné de sorte que son centre se trouve en (320, 240). L’afficher à cet emplacement centre le texte dans la fenêtre, quelle que soit sa longueur.

Teste == 20 ici, pas > 20 : la limite arrête la liste à 20, elle ne peut donc jamais en contenir davantage.

Une fois le ciel rempli, il ne reste plus qu’à le regarder. La section 2 montre comment recommencer une partie avec une touche, et comment terminer une partie par une victoire ou une défaite.

challenge icon

Défi

Moyen

Termine le ciel nocturne :

  1. Ajoute une étoile lors d’un clic uniquement tant que len(stars) < 20.
  2. Lorsque len(stars) == 20, affiche The sky is full! en (230, 230, 240), centrée en (320, 240).

Essayez vous-même

import random
import pygame

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

# Préparez les éléments ici, avant la boucle de jeu.
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)

    # Modifiez les éléments ici, une fois par image.

    screen.fill((20, 24, 48))
    # Dessinez ici, après le remplissage.
    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()

Toutes les leçons de Python dans une fenêtre de jeu

Entraînez-vous par vous-même : Playground Pygame