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.
Desafío
IntermedioTermina Night Sky:
- Agrega una estrella al hacer clic solo mientras
len(stars) < 20. - Cuando
len(stars) == 20, muestraThe 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