Pulsa R para volver a jugar
Parte de la sección Reglas del juego del Journey de Pygame de Coddy. Lección 3 de 29.
Cuando termina la partida, el jugador quiere volver a jugar sin reiniciar el programa. Añade una línea a la pantalla de fin de partida y una tecla que inicie una nueva partida:
if event.key == pygame.K_r and state == "over":
player.x = 220
rock.y = -24
rock.x = random.randint(0, 456)
state = "play"Volver a establecer el estado en "play" no es suficiente. La roca todavía está tocando al jugador, así que el siguiente fotograma terminaría la partida de nuevo. Coloca los elementos que se movieron de vuelta en las posiciones iniciales de una nueva partida.
Este es el mismo patrón que el del menú: una tecla, una comprobación del estado actual y un nuevo estado.
Desafío
Fácil- En la pantalla de fin de partida, debajo de
Game over, muestraPress R to play againcentrado en (240, 200). - Cuando se pulse R y el estado sea
"over": devuelve al jugador a x 220, la roca a y -24 con una x aleatoria de 0 a 456, y establece el estado en"play".
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 = "menu"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN and state == "menu":
state = "play"
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))
if state == "menu":
title = font.render("Meteor Dodge", True, (240, 240, 240))
screen.blit(title, title.get_rect(center=(240, 140)))
hint = font.render("Press Enter to play", True, (240, 240, 240))
screen.blit(hint, hint.get_rect(center=(240, 200)))
else:
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()
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