Ganar o perder
Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 29 de 32.
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 continúa.
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 fallosEl 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.
Desafío
Intermedio- Indenta todo lo que se mueve (las teclas, la cesta, el bloque, los aciertos y los fallos) dentro de
if lives > 0 and score < 10:. - Después de dibujar la puntuación y las vidas, muestra
Game overcuandolives == 0, oYou win!cuandoscore == 10, centrado en(240, 160).
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 El bucle del juego
1Mueve un cuadrado
Abre una ventanaRellena el fondo4Movimiento basado en el tiempo
Tiempo deltaPíxeles por segundoVector2Aceleración y fricciónReaparecer al otro lado de la pantallaPractica por tu cuenta: Playground de Pygame