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.
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 reglas.py para sugerir jugadas:
from reglas import sugerir_movimiento
lan = sugerir_movimiento(casillas, turno, motor="stockfish", nivel="medio")- Niveles:
facil(~200 ms),medio(~500 ms),dificil(~2000 ms).
- El menú actualmente ofrece el modo local entre dos jugadores. La guía incluye pasos para extender a IA y APIs.
- El GestorRecursos tolera faltantes: crea placeholders y deshabilita sonido si
pygame.mixerno está disponible.