Menu
CoddyTech

Primero en llegar a cinco

Parte de la sección Proyectos del Journey de Pygame de Coddy. Lección 19 de 31.

El primer jugador en llegar a 5 puntos gana. Guarda el nombre del ganador en una variable que empieza como None, el valor de Python para «todavía nada»:

winner = None

if left_score == 5:
    winner = "Left player wins!"
elif right_score == 5:
    winner = "Right player wins!"

Compruébalo con winner is None o winner is not None. Una vez que alguien haya ganado, la pelota seguirá esperando: la barra espaciadora saca solo mientras winner is None.

Muestra al ganador centrado en (300, 120), en lugar del mensaje de saque.

challenge icon

Desafío

Intermedio
  1. Antes del bucle, establece winner = None.
  2. Después de anotar, establece winner en "Left player wins!" cuando left_score == 5, o en "Right player wins!" cuando right_score == 5.
  3. La barra espaciadora sirve solo cuando winner is None.
  4. Cuando haya un ganador, muéstralo centrado en (300, 120) en lugar de Press Space to serve.

Pruébalo tú mismo

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)

ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0
waiting = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            waiting = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        left.y -= 6
    if keys[pygame.K_s]:
        left.y += 6
    if keys[pygame.K_UP]:
        right.y -= 6
    if keys[pygame.K_DOWN]:
        right.y += 6
    left.clamp_ip(screen.get_rect())
    right.clamp_ip(screen.get_rect())

    if not waiting:
        ball.x += vx
        ball.y += vy
        if ball.top <= 0 or ball.bottom >= 400:
            vy = -vy
        if ball.colliderect(left):
            vx = abs(vx)
            vy = (ball.centery - left.centery) // 6
        if ball.colliderect(right):
            vx = -abs(vx)
            vy = (ball.centery - right.centery) // 6
        if ball.left > 600:
            left_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True
        if ball.right < 0:
            right_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), left)
    pygame.draw.rect(screen, (235, 80, 80), right)
    pygame.draw.rect(screen, (255, 196, 0), ball)
    score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
    screen.blit(score, score.get_rect(center=(300, 30)))
    if waiting:
        message = font.render("Press Space to serve", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(300, 360)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Todas las lecciones de Proyectos

Practica por tu cuenta: Playground de Pygame