Tutorial juego Pong Python: crea tu propio Pong con Pygame paso a paso
¡Bienvenido a este tutorial juego Pong Python! Si eres un programador principiante y quieres aprender a programar un juego clásico Python, estás en el lugar correcto. Aquí te guiaré paso a paso para que puedas crear Pong con Pygame, una biblioteca ideal para desarrollo de juegos en Python.
Este proyecto Pygame para principiantes te ayudará a comprender conceptos básicos como creación de ventanas, manejo de eventos, dibujo de objetos, control de movimiento, detección de colisiones y actualización de puntuaciones.
Índice
- Instalación y configuración del entorno
- Creando la ventana del juego con Pygame
- Dibujando las palas y la bola
- Manejo de eventos y control de movimiento
- Detección de colisiones y rebote
- Actualización de la puntuación
- Cierre del juego y mejores prácticas
Instalación y configuración del entorno
Antes de comenzar a programar, necesitamos preparar nuestro entorno.
Paso 1: Instalar Python
Asegúrate de tener Python instalado en tu equipo (recomiendo Python 3.6+).
Puedes descargarlo desde python.org.
Paso 2: Instalar Pygame
Pygame es una biblioteca para crear videojuegos. La instalamos fácilmente con pip:
1 2 |
pip install pygame |
Para comprobar que se instaló correctamente, abre una consola Python y ejecuta:
1 2 3 |
import pygame print(pygame.ver) |
Si no da error, ¡estás listo para continuar!
Creando la ventana del juego con Pygame
El primer paso en cualquier proyecto con Pygame es crear una ventana para mostrar nuestro juego.
Paso 1: Importar Pygame y inicializar
1 2 3 4 |
import pygame pygame.init() # Inicializa todos los módulos de Pygame |
Paso 2: Crear la ventana
Decidiremos el tamaño del juego. Pong clásico suele ser una ventana de 800×600 pixels.
1 2 3 4 5 6 7 |
# Dimensiones de la ventana WIDTH, HEIGHT = 800, 600 # Crear ventana window = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('Pong clásico con Pygame') |
Paso 3: Ciclo principal del juego
Un juego debe correr dentro de un “loop” o ciclo donde se actualizan los eventos y la pantalla.
1 2 3 4 5 6 7 8 9 10 11 |
running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False window.fill((0, 0, 0)) # Rellenar ventana con negro pygame.display.update() # Actualizar pantalla pygame.quit() # Cerrar Pygame |
Este código crea una ventana negra que se puede cerrar.
Dibujando las palas y la bola
Ahora agregaremos los elementos visibles de nuestro juego: las palas y la bola.
Paso 1: Definir colores y objetos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Colores WHITE = (255, 255, 255) # Dimensiones de las palas PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100 # Posiciones iniciales left_paddle = pygame.Rect(10, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT) right_paddle = pygame.Rect(WIDTH - 20, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT) # Bola BALL_SIZE = 15 ball = pygame.Rect(WIDTH//2 - BALL_SIZE//2, HEIGHT//2 - BALL_SIZE//2, BALL_SIZE, BALL_SIZE) |
Los objetos pygame.Rect
facilitan trabajar con posiciones y dimensiones.
Paso 2: Dibuja las palas y la bola en la ventana
Dentro del ciclo de juego, dibuja los objetos antes de actualizar la pantalla:
1 2 3 4 5 6 7 |
window.fill((0, 0, 0)) # Limpiar pygame.draw.rect(window, WHITE, left_paddle) pygame.draw.rect(window, WHITE, right_paddle) pygame.draw.ellipse(window, WHITE, ball) pygame.display.update() |
La bola se dibuja con pygame.draw.ellipse
para un círculo/alelipse.
Manejo de eventos y control de movimiento
Queremos que el jugador pueda controlar la pala con el teclado.
Paso 1: Detectar teclas presionadas
En vez de solo detectar eventos, Pygame permite leer teclas presionadas:
1 2 3 4 5 6 7 8 9 10 11 |
keys = pygame.key.get_pressed() if keys[pygame.K_w]: left_paddle.y -= 5 # Mover hacia arriba if keys[pygame.K_s]: left_paddle.y += 5 # Mover hacia abajo if keys[pygame.K_UP]: right_paddle.y -= 5 if keys[pygame.K_DOWN]: right_paddle.y += 5 |
Paso 2: Limitar movimiento para no salirse de la ventana
Agregaremos límites para que las palas no salgan del área visible.
1 2 3 4 5 6 7 8 9 10 |
if left_paddle.top < 0: left_paddle.top = 0 if left_paddle.bottom > HEIGHT: left_paddle.bottom = HEIGHT if right_paddle.top < 0: right_paddle.top = 0 if right_paddle.bottom > HEIGHT: right_paddle.bottom = HEIGHT |
Paso 3: Movimiento de la bola
Definiremos una velocidad inicial para la bola y actualizaremos su posición automáticamente.
1 2 3 4 5 6 7 |
ball_speed_x = 5 ball_speed_y = 5 # Dentro del ciclo principal: ball.x += ball_speed_x ball.y += ball_speed_y |
Detección de colisiones y rebote
Para que el juego sea divertido, la bola debe rebotar en las palas y en los bordes.
Paso 1: Rebote en bordes superior e inferior
1 2 3 |
if ball.top <= 0 or ball.bottom >= HEIGHT: ball_speed_y *= -1 # Cambiar dirección vertical |
Paso 2: Rebote en palas
Usamos la función colliderect
que devuelve True si dos rectángulos chocan:
1 2 3 |
if ball.colliderect(left_paddle) or ball.colliderect(right_paddle): ball_speed_x *= -1 # Cambiar dirección horizontal |
Paso 3: Resetear la bola si se marca punto
Si la bola pasa los bordes izquierdo o derecho, sumamos punto y reiniciamos la bola al centro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Variables de puntuación left_score = 0 right_score = 0 if ball.left <= 0: right_score += 1 ball.center = (WIDTH//2, HEIGHT//2) ball_speed_x *= -1 if ball.right >= WIDTH: left_score += 1 ball.center = (WIDTH//2, HEIGHT//2) ball_speed_x *= -1 |
Actualización de la puntuación
Mostraremos en pantalla la puntuación con texto.
Paso 1: Inicializar fuente
1 2 |
font = pygame.font.SysFont('comicsans', 40) |
Paso 2: Renderizar y mostrar puntuaciones
Dentro del ciclo principal:
1 2 3 4 5 6 |
left_text = font.render(f'{left_score}', True, WHITE) right_text = font.render(f'{right_score}', True, WHITE) window.blit(left_text, (WIDTH//4, 20)) window.blit(right_text, (WIDTH * 3//4, 20)) |
Código completo del juego Pong con Pygame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import pygame # Inicializar Pygame pygame.init() # Configuración WIDTH, HEIGHT = 800, 600 window = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('Pong clásico con Pygame') # Colores WHITE = (255, 255, 255) BLACK = (0, 0, 0) # Palas PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100 left_paddle = pygame.Rect(10, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT) right_paddle = pygame.Rect(WIDTH - 20, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT) # Bola BALL_SIZE = 15 ball = pygame.Rect(WIDTH//2 - BALL_SIZE//2, HEIGHT//2 - BALL_SIZE//2, BALL_SIZE, BALL_SIZE) ball_speed_x = 5 ball_speed_y = 5 # Puntuación left_score = 0 right_score = 0 # Fuente font = pygame.font.SysFont('comicsans', 40) # Reloj para controlar FPS clock = pygame.time.Clock() running = True while running: clock.tick(60) # 60 FPS for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Movimiento palas keys = pygame.key.get_pressed() if keys[pygame.K_w]: left_paddle.y -= 5 if keys[pygame.K_s]: left_paddle.y += 5 if keys[pygame.K_UP]: right_paddle.y -= 5 if keys[pygame.K_DOWN]: right_paddle.y += 5 # Limitar las palas dentro de la ventana if left_paddle.top < 0: left_paddle.top = 0 if left_paddle.bottom > HEIGHT: left_paddle.bottom = HEIGHT if right_paddle.top < 0: right_paddle.top = 0 if right_paddle.bottom > HEIGHT: right_paddle.bottom = HEIGHT # Mover la bola ball.x += ball_speed_x ball.y += ball_speed_y # Rebote en bordes if ball.top <= 0 or ball.bottom >= HEIGHT: ball_speed_y *= -1 # Rebote en palas if ball.colliderect(left_paddle) or ball.colliderect(right_paddle): ball_speed_x *= -1 # Punto y reinicio if ball.left <= 0: right_score += 1 ball.center = (WIDTH//2, HEIGHT//2) ball_speed_x *= -1 if ball.right >= WIDTH: left_score += 1 ball.center = (WIDTH//2, HEIGHT//2) ball_speed_x *= -1 # Dibujar todo window.fill(BLACK) pygame.draw.rect(window, WHITE, left_paddle) pygame.draw.rect(window, WHITE, right_paddle) pygame.draw.ellipse(window, WHITE, ball) left_text = font.render(f'{left_score}', True, WHITE) right_text = font.render(f'{right_score}', True, WHITE) window.blit(left_text, (WIDTH//4, 20)) window.blit(right_text, (WIDTH * 3//4, 20)) pygame.display.update() pygame.quit() |
Conclusión y buenas prácticas
¡Felicidades! Acabas de crear un juego clásico Pong con Python y Pygame desde cero.
En este tutorial juego Pong Python aprendiste:
- Cómo instalar y configurar Pygame
- Crear la ventana y ciclo de eventos
- Dibujar formas básicas (palas y bola)
- Controlar movimiento con teclado
- Detectar colisiones y rebotes
- Actualizar y mostrar la puntuación
Buenas prácticas para tus futuros proyectos:
- Usa constantes para tamaños y colores para facilitar ajustes
- Organiza tu código en funciones o clases para mayor claridad
- Controla el FPS para que el juego sea fluido
- Añade comentarios para entender mejor cada parte
Te animo a que sigas experimentando y añadiendo características, como:
- Sonidos al rebotar
- Mejores efectos visuales
- Modos para un jugador (contra IA)
Si quieres aprender más, visita la documentación oficial de Pygame.
¿Listo para crear juegos más avanzados? ¡Manos a la obra!