Jugar de nuevo
Lección 17 de 41 del curso Crea juegos con Pygame de Coddy.
Después de que termine la partida, el jugador no debería tener que reiniciar el programa. Haz que R inicie una nueva partida: devuelve cada valor que haya cambiado a su valor inicial.
elif event.key == pygame.K_r and (lives == 0 or score == 10):
score = 0
lives = 3
basket.x = 200
block.y = -20
block.x = random.randint(0, 460)La condición es importante. Sin (lives == 0 or score == 10), R borraría la puntuación a mitad de una partida. Los paréntesis agrupan los dos finales, así que and se aplica a ambos.
Indícale la tecla al jugador: muestra Press R to play again debajo del resultado.
Desafío
IntermedioHaz que R inicie una nueva partida.
- En la rama KEYDOWN, cuando la tecla sea
pygame.K_ry la partida haya terminado, establece la puntuación en 0, las vidas en 3,basket.xen 200 y haz que aparezca un bloque nuevo desdey = -20en una x aleatoria. - Cuando la partida haya terminado, muestra
Press R to play againcentrado en(240, 200).
Pulsa «Jugar», pierde y después pulsa R: se inicia una nueva partida. Después, pulsa «Comprobar».
Pruébalo tú mismo
import random
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3
paused = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused = not paused
if lives > 0 and score < 10 and not paused:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
basket.x -= 8
if keys[pygame.K_RIGHT]:
basket.x += 8
basket.clamp_ip(screen.get_rect())
block.y += 3
if block.top > 360:
block.y = -20
block.x = random.randint(0, 460)
lives -= 1
if block.colliderect(basket):
block.y = -20
block.x = random.randint(0, 460)
score += 1
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), basket)
pygame.draw.rect(screen, (235, 80, 80), block)
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (10, 10))
lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
screen.blit(lives_text, (370, 10))
if lives == 0:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
elif score == 10:
message = font.render("You win!", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
if paused:
message = font.render("Paused", 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 Crea juegos con Pygame
Practica por tu cuenta: Playground de Pygame