import pygame import sys import random # Inicializar pygame pygame.init() # Configuración de la pantalla WIDTH, HEIGHT = 800, 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Pong") # Colores BLACK = (0, 0, 0) WHITE = (255, 255, 255) # Pala del jugador paddle_width, paddle_height = 15, 100 left_paddle_x, left_paddle_y = 50, HEIGHT // 2 - paddle_height // 2 right_paddle_x, right_paddle_y = WIDTH - 50 - paddle_width, HEIGHT // 2 - paddle_height // 2 paddle_speed = 5 # Pelota ball_size = 15 ball_x, ball_y = WIDTH // 2, HEIGHT // 2 ball_speed_x, ball_speed_y = 4 * random.choice((1, -1)), 4 * random.choice((1, -1)) # Puntuación left_score = 0 right_score = 0 font = pygame.font.Font(None, 36) def reset_ball(): global ball_x, ball_y, ball_speed_x, ball_speed_y ball_x, ball_y = WIDTH // 2, HEIGHT // 2 ball_speed_x = 4 * random.choice((1, -1)) ball_speed_y = 4 * random.choice((1, -1)) # Bucle principal del juego clock = pygame.time.Clock() running = True while running: # Manejo de eventos for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Movimiento de las palas keys = pygame.key.get_pressed() if keys[pygame.K_w] and left_paddle_y > 0: left_paddle_y -= paddle_speed if keys[pygame.K_s] and left_paddle_y < HEIGHT - paddle_height: left_paddle_y += paddle_speed # IA para la pala derecha (sigue la pelota) if right_paddle_y + paddle_height // 2 < ball_y and right_paddle_y < HEIGHT - paddle_height: right_paddle_y += paddle_speed * 0.9 if right_paddle_y + paddle_height // 2 > ball_y and right_paddle_y > 0: right_paddle_y -= paddle_speed * 0.9 # Movimiento de la pelota ball_x += ball_speed_x ball_y += ball_speed_y # Colisiones con los bordes superior e inferior if ball_y <= 0 or ball_y >= HEIGHT - ball_size: ball_speed_y *= -1 # Colisiones con las palas # Pala izquierda if (left_paddle_x < ball_x < left_paddle_x + paddle_width and left_paddle_y < ball_y < left_paddle_y + paddle_height): ball_speed_x *= -1 # Añadir efecto de ángulo según donde golpee la pelota middle_paddle = left_paddle_y + paddle_height / 2 difference_in_y = middle_paddle - ball_y ball_speed_y = -difference_in_y * 0.1 # Pala derecha if (right_paddle_x < ball_x < right_paddle_x + paddle_width and right_paddle_y < ball_y < right_paddle_y + paddle_height): ball_speed_x *= -1 # Añadir efecto de ángulo según donde golpee la pelota middle_paddle = right_paddle_y + paddle_height / 2 difference_in_y = middle_paddle - ball_y ball_speed_y = -difference_in_y * 0.1 # Puntos if ball_x <= 0: right_score += 1 reset_ball() if ball_x >= WIDTH - ball_size: left_score += 1 reset_ball() # Dibujar todo screen.fill(BLACK) pygame.draw.rect(screen, WHITE, (left_paddle_x, left_paddle_y, paddle_width, paddle_height)) pygame.draw.rect(screen, WHITE, (right_paddle_x, right_paddle_y, paddle_width, paddle_height)) pygame.draw.ellipse(screen, WHITE, (ball_x, ball_y, ball_size, ball_size)) pygame.draw.aaline(screen, WHITE, (WIDTH // 2, 0), (WIDTH // 2, HEIGHT)) # Mostrar puntuación left_text = font.render(str(left_score), True, WHITE) right_text = font.render(str(right_score), True, WHITE) screen.blit(left_text, (WIDTH // 4, 20)) screen.blit(right_text, (3 * WIDTH // 4, 20)) # Actualizar pantalla pygame.display.flip() clock.tick(60) pygame.quit() sys.exit()