Proyecto modular para practicar POO con un juego de ajedrez en Pygame, con integración de reglas vía python-chess, soporte de sonido, motores UCI locales y juego en red LAN.
✨ v2.1: Integración profesional de Stockfish con threading asincrónico. Ver cambios
Para documentación completa y detallada, visita la Wiki del Proyecto:
- 🏠 Inicio - Visión general y navegación
- 📜 Historia - Evolución y desarrollo del proyecto
- 🛠️ Tecnologías - Stack tecnológico completo
- 🎓 Prácticas - Metodologías y POO aplicado
- 🏛️ Arquitectura - Estructura y componentes
- 📖 Guía de Uso - Instalación y manual de juego
- 🚀 Desarrollo Futuro - Roadmap y características planificadas
- modelos.py: Color, TipoPieza, EstadoJuego y GestorRecursos (imágenes y sonidos)
- pieza.py: movimientos candidatos por tipo de pieza
- tablero.py: estado del juego y ejecución de movimientos
- reglas.py: conversión FEN, legalidad con python-chess y sugerencias UCI
- ui.py: menú básico y render de tablero; temporizadores y sonido
- lan.py: comunicación en red para partidas LAN (servidor y cliente)
- main.py: punto de entrada y bucle principal
- docs/guia_pygame_ajedrez.md: guía didáctica por etapas
- Menú principal jerárquico con navegación por teclado
- Fondos de menú personalizados:
menu_classic.pngpara Ajedrez Clásicomenu_soul.pngpara Ajedrez Sombras- Sistema de bucle para volver al menú principal desde cualquier modo
- Sonido "ficha.mp3":
- Reproducción en navegación de menú y confirmación
- Al mover una pieza durante la partida
- Múltiples modos de juego:
- "Jugador vs Jugador" (local)
- "Partida LAN - Crear Servidor" (juega con blancas)
- "Partida LAN - Unirse a Servidor" (juega con negras)
- "Jugador vs Máquina (Stockfish)" - Motor UCI integrado
- Render del tablero y temporizadores por color
- Reglas y análisis:
- Conversión a FEN y validación de legalidad con python-chess
- Sugerencia de jugada vía motores UCI (Stockfish, LCZero) con niveles
- Sistema de combate RPG:
- 7 tipos de piezas con HP y daño (Peón: 20HP/5DMG ... Boss: 300HP/100DMG)
- Combate por eliminación (no captura instantánea)
- Barras de HP visuales con código de colores (verde/amarillo/rojo)
- Números de HP visibles (ej: "50/100")
- Presentación visual mejorada:
- Usa imágenes PNG de piezas del ajedrez clásico
- Boss con imagen especial (
boss.png) y borde dorado - Efectos visuales distintivos para el Rey Caído
- Mecánicas de juego:
- Niebla de guerra (visibilidad 3x3 alrededor del Rey)
- Boss IA con táctica de invocación (30% por turno)
- Victoria al derrotar al Boss, derrota si cae tu Rey
- Sistema de juego en red LAN:
- Comunicación cliente-servidor mediante sockets TCP
- Protocolo JSON para sincronización de movimientos
- Servidor escucha en puerto 8080 y juega con blancas
- Cliente se conecta a IP del servidor y juega con negras
- Sincronización en tiempo real entre equipos
- Python 3.10+
- pygame
- requests
- python-chess
- chess-engine (opcional; el código usa
chess.enginede python-chess)
Instala con:
pip install -r requirements.txt
python main.py
- Coloca imágenes (opcional) en
images/con nombres esperados (p.ej. reina_blanca.png). - Coloca el fondo del menú (opcional) en
images/menu.png. - Coloca el sonido en
sounds/ficha.mp3. Si falta, el juego continúa sin sonido.
Para crear un servidor (jugador con blancas):
- Ejecuta
python main.py - Selecciona "Partida LAN - Crear Servidor"
- Obtén tu IP local:
- Windows:
ipconfigen CMD (busca "Dirección IPv4") - Linux/Mac:
ifconfigoip addr
- Windows:
- Comunica tu IP al otro jugador
- Espera la conexión (máximo 60 segundos)
- ¡Comienza a jugar!
Para conectarse a un servidor (jugador con negras):
- Ejecuta
python main.py - Selecciona "Partida LAN - Unirse a Servidor"
- Introduce la IP del servidor cuando se solicite
- Espera confirmación de conexión
- ¡Comienza a jugar!
Configuración de firewall:
- El servidor debe permitir conexiones entrantes en el puerto 8080
- En Windows: Panel de Control > Sistema y Seguridad > Firewall de Windows
- Crear regla de entrada para permitir puerto TCP 8080
Notas importantes:
- Ambos equipos deben estar en la misma red local (LAN)
- El servidor siempre juega con blancas, el cliente con negras
- Los movimientos se sincronizan automáticamente
- Si se pierde la conexión, la partida termina
- Coloca
stockfish.exey/olc0.exeaccesibles (PATH o junto al proyecto). - Usa motor_ajedrez.py para integración centralizada:
from motor_ajedrez import MotorAjedrez, NivelDificultad
motor = MotorAjedrez(nivel=NivelDificultad.MEDIO)
movimiento = motor.buscar_movimiento(casillas, turno)
motor.cerrar()- Niveles:
FACIL(100 ms),MEDIO(500 ms),DIFICIL(2000 ms),ANALISIS(5000 ms). - Búsqueda asincrónica con threading:
motor.buscar_movimiento_async(casillas, turno, callback)
- motor_ajedrez.py: Módulo centralizado con interfaz profesional
- Threading asincrónico: UI nunca se congela
- Detección automática: Busca Stockfish en PATH y carpetas locales
- 4 Niveles de dificultad: FACIL/MEDIO/DIFICIL/ANALISIS
- IA Sombras mejorada: Boss utiliza análisis estratégico
- 100% Backward compatible: Código antiguo sigue funcionando
- 00_LEER_PRIMERO.md - Resumen ejecutivo
- QUICKSTART_STOCKFISH.md - Guía rápida (5 min)
- docs/STOCKFISH.md - Instalación completa por SO
- CAMBIOS_v2.1_STOCKFISH.md - Detalles técnicos
- verificar_setup.py - Script de validación
# 1. Descargar Stockfish desde https://stockfishchess.org/download/
# 2. Crear carpeta e instalar
mkdir ./stockfish
# Extraer binario aquí
# 3. Verificar
python verificar_setup.py
# 4. Jugar
python main.py
# → AJEDREZ CLÁSICO → Jugador vs Máquina (Stockfish)- ✅ No se congela: Threading asincrónico mantiene UI responsiva
- ✅ Automática: Detección del motor sin configuración manual
- ✅ Escalable: Reutilizable en todos los modos (clásico, sombras, LAN)
- ✅ Configurable: 4 niveles de dificultad
- ✅ Robusta: Fallback automático si hay errores
- El menú ahora ofrece "Jugador vs Máquina (Stockfish)" con integración profesional
- Toda la documentación está en cada archivo para referencia rápida
- Compatible con Windows/Linux/macOS
- El GestorRecursos tolera faltantes: crea placeholders y deshabilita sonido si
pygame.mixerno está disponible.