Este proyecto implementa un motor de búsqueda con adversario en C++[cite: 78] diseñado para resolver una variante asimétrica y altamente restringida de juegos de tablero en una cuadrícula de 9x9[cite: 80]. El sistema es capaz de evaluar millones de estados futuros para tomar decisiones óptimas bajo estrictas limitaciones de tiempo.
El motor supera la complejidad de un 5-en-Raya estándar al integrar mecánicas que alteran dinámicamente el árbol de juego:
- Secuencia Asimétrica de Turnos: Los jugadores colocan piezas en un patrón 1-2-2-2[cite: 80], lo que introduce un alto riesgo de ataques combinados en un solo turno.
- Regla de la Trinidad (Restricción de Módulo 3): Los movimientos legales están matemáticamente limitados por la ecuación
(fila + columna) % 3 == fase_actual % 3[cite: 80]. - Topología Dinámica: Presencia de celdas de Sabotaje (convierten la pieza al color rival), Bombas (destruyen filas y columnas enteras) y celdas Místicas (otorgan turnos extra)[cite: 80, 81].
Para navegar el intratable factor de ramificación del tablero de 9x9, el motor central utiliza el algoritmo Minimax[cite: 96]. Para lograr un rendimiento viable en tiempo real, se implementó Poda Alfa-Beta (\alpha-\beta)[cite: 96], la cual descarta ramas del árbol de decisión que matemáticamente no pueden influir en el resultado final[cite: 97].
La eficiencia de la poda Alfa-Beta depende directamente del orden en que se evalúan los nodos. Se desarrolló un sistema de Move Ordering que pre-evalúa superficialmente los estados hijos antes de la recursión[cite: 97]. Al forzar al algoritmo a explorar primero las ramas más prometedoras, se maximizan los cortes (podas) tempranos, permitiendo que el motor alcance una profundidad de búsqueda de 7 capas[cite: 97] dentro del límite de tiempo.
La evaluación de los estados hoja superó las vulnerabilidades de los conteos de contigüidad básicos mediante una arquitectura de Ventanas Deslizantes[cite: 98].
- Detección de Líneas Rotas: En lugar de buscar piezas estrictamente adyacentes, el escáner analiza vectores de 5 casillas para detectar altas concentraciones de piezas (ej.
O_OOO)[cite: 98, 100]. - Penalización Asimétrica: La heurística asigna un peso negativo drástico a las estructuras ofensivas del rival para forzar un comportamiento de "bloqueo preventivo" contra la regla de turnos dobles[cite: 98, 100].
Para las fases finales (endgames), el sistema puede conmutar a un algoritmo de Búsqueda Exhaustiva (DFS puro) que abandona las estimaciones heurísticas para resolver matemáticamente el tablero hasta los nodos terminales, garantizando la victoria o forzando el empate si existe una ruta probada[cite: 96].
- Lenguaje: C++[cite: 78].
- Conceptos Aplicados: Teoría de Juegos (Zero-Sum Games), Minimax, Alpha-Beta Pruning, Heurísticas de Evaluación, Árboles de Decisión.
El motor incluye soporte para simulaciones automáticas (Batch mode) ideales para benchmarking de algoritmos, así como una interfaz visual renderizada con OpenGL[cite: 82, 84].
# Compilación
make -j
# Ejecución de un duelo automatizado (IA vs IA) en consola para análisis de rendimiento
./n_en_raya -p1 inteligente -id1 1 -p2 inteligente -id2 1 -d 7 -nogui