Una pantalla de menú
Parte de la sección Reglas del juego del Journey de Pygame de Coddy. Lección 2 de 29.
La mayoría de los juegos se abren con un menú: un título y una línea que te indica cómo empezar. Un menú es un estado más. Empieza con state = "menu" y dibuja una pantalla distinta mientras ese estado esté activo.
Para iniciar el juego basta con pulsar una tecla, así que lee la pulsación de los eventos. Un evento KEYDOWN se produce una vez por pulsación, y event.key indica qué tecla fue:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"La parte state == "menu" es importante: Enter solo inicia el juego en el menú. Más adelante, si pulsas Enter en otra pantalla, no pasa nada.
Ahora, el dibujo también depende del estado:
screen.fill((30, 30, 46))
if state == "menu":
# el título y Pulsa Enter para jugar
else:
# el jugador, la roca, la puntuación, Fin del juegoEl código de actualización sigue dentro de if state == "play":, así que nada se mueve mientras se muestra el menú.
Desafío
Fácil- Empieza con
state = "menu". - En el bucle de eventos, cuando se pulse Enter y el estado sea
"menu", cámbialo a"play". - Mientras el estado sea
"menu", dibuja soloMeteor Dodgecentrado en (240, 140) yPress Enter to playcentrado en (240, 200) sobre el fondo oscuro. - De lo contrario, dibuja el juego como antes.
Pruébalo tú mismo
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Meteor Dodge")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
player = pygame.Rect(220, 300, 40, 40)
rock = pygame.Rect(random.randint(0, 456), -24, 24, 24)
score = 0
state = "play"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if state == "play":
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 6
if keys[pygame.K_RIGHT]:
player.x += 6
player.clamp_ip(screen.get_rect())
rock.y += 4
if rock.top > 360:
rock.y = -24
rock.x = random.randint(0, 456)
score += 1
if rock.colliderect(player):
state = "over"
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 196, 0), player)
pygame.draw.rect(screen, (235, 80, 80), rock)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
if state == "over":
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Reglas del juego
1Estados del juego
Una variable de estadoUna pantalla de menúPulsa R para volver a jugarUna función de reinicioUna función por estadoPractica por tu cuenta: Playground de Pygame