Menu
CoddyTech

Marcador

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

Una pelota que sale por la derecha suma un punto para el jugador de la izquierda, y viceversa. Divide la prueba en dos para que cada lado sepa quién anotó:

if ball.left > 600:
    left_score += 1
    ball.center = (300, 200)
    vx = -vx
if ball.right < 0:
    right_score += 1
    ball.center = (300, 200)
    vx = -vx

Muestra ambas puntuaciones en una sola línea en la parte superior, centradas: f"{left_score} : {right_score}" se lee 2 : 1.

challenge icon

Desafío

Fácil
  1. Antes del bucle, crea font = pygame.font.Font(None, 36), left_score = 0 y right_score = 0.
  2. Divide el reinicio en dos: una pelota que supera el borde derecho suma 1 a left_score; una pelota que supera el borde izquierdo suma 1 a right_score. Ambos casos llevan la pelota al centro e invierten vx.
  3. Renderiza f"{left_score} : {right_score}" en (240, 240, 240), centrado en (300, 30).

Pruébalo tú mismo

import pygame

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

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)

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_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())

    ball.x += vx
    ball.y += vy
    if ball.top <= 0 or ball.bottom >= 400:
        vy = -vy
    if ball.colliderect(left):
        vx = abs(vx)
    if ball.colliderect(right):
        vx = -abs(vx)
    if ball.right < 0 or ball.left > 600:
        ball.center = (300, 200)
        vx = -vx

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

pygame.quit()
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Proyectos

Practica por tu cuenta: Playground de Pygame