Menu
CoddyTech

Ganar o perder

Lección 15 de 41 del curso Crea juegos con Pygame de Coddy.

El juego termina. Aquí pierdes cuando las vidas llegan a 0 y ganas cuando la puntuación llega a 10. Mientras no haya ocurrido ninguna de las dos cosas, el juego sigue en marcha.

Pon todo lo que se mueve bajo una sola condición, para que se detenga cuando termine el juego:

if lives > 0 and score < 10:
    # teclas, la cesta, el bloque, aciertos y fallos

El dibujo queda fuera de ese if: la pantalla sigue mostrando el último fotograma y, encima, el resultado.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)) es el Rect de la imagen del texto, colocado con el centro en (240, 160). Al dibujar en un Rect, se usa su esquina superior izquierda, así que el texto queda centrado.

challenge icon

Desafío

Intermedio

Termina el juego con una victoria o una derrota.

  1. Indenta todo lo que se mueve (las teclas, la cesta, el bloque, las capturas y los fallos) dentro de if lives > 0 and score < 10:.
  2. Después de la puntuación y las vidas, muestra Game over cuando lives == 0, o You win! cuando score == 10, centrado en (240, 160).

Pulsa «Jugar» y deja caer tres bloques: aparece Game over y el juego se detiene. 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

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    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))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Todas las lecciones de Crea juegos con Pygame

Practica por tu cuenta: Playground de Pygame