Menu
CoddyTech

Un cielo lleno

Parte de la sección Python en una ventana de juego del Journey de Pygame de Coddy. Lección 32 de 32.

El juego termina cuando el cielo tiene veinte estrellas. Cambian dos cosas: los clics dejan de añadir estrellas y aparece un mensaje que lo indica. Ambas cosas consultan la misma lista:

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)) es el rectángulo de la imagen de texto, colocado con el centro en (320, 240). Al dibujar el texto en esa posición, queda en el centro de la ventana, sea cual sea su longitud.

Comprueba == 20 aquí, no > 20: el límite detiene la lista en 20, así que nunca contiene más.

Con el cielo lleno, no queda nada por hacer excepto contemplarlo. La sección 2 muestra cómo reiniciar un juego con una tecla y cómo terminarlo con una victoria o una derrota.

challenge icon

Desafío

Intermedio

Termina Night Sky:

  1. Agrega una estrella al hacer clic solo mientras len(stars) < 20.
  2. Cuando len(stars) == 20, muestra The sky is full! en (230, 230, 240), centrado en (320, 240).

Pruébalo tú mismo

import random
import pygame

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

# Prepara todo aquí, antes del bucle del juego.
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)

    # Cambia las cosas aquí, una vez por fotograma.

    screen.fill((20, 24, 48))
    # Dibuja aquí, después de rellenar la pantalla.
    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()

Todas las lecciones de Python en una ventana de juego

Practica por tu cuenta: Playground de Pygame