Menu
CoddyTech

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 juego

El código de actualización sigue dentro de if state == "play":, así que nada se mueve mientras se muestra el menú.

challenge icon

Desafío

Fácil
  1. Empieza con state = "menu".
  2. En el bucle de eventos, cuando se pulse Enter y el estado sea "menu", cámbialo a "play".
  3. Mientras el estado sea "menu", dibuja solo Meteor Dodge centrado en (240, 140) y Press Enter to play centrado en (240, 200) sobre el fondo oscuro.
  4. 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()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Reglas del juego

Practica por tu cuenta: Playground de Pygame