Nombre: Fabian A Almeida Martinez Grupo: 311
Este proyecto implementa una Inteligencia Artificial (IA) para jugar al clásico juego de estrategia HEX, utilizando algoritmos de grafos para tomar decisiones.
El juego se ejecuta en consola y permite partidas entre:
- 🤖 IA vs IA
- 🤖 IA vs Humano
- 👤 Humano vs Humano
HEX es un juego de conexión en un tablero hexagonal representado en formato even-r (filas pares desplazadas).
- ● Jugador 1: conecta izquierda ← → derecha
- ○ Jugador 2: conecta arriba ↑ ↓ abajo
- □ Casillas vacías
El estado del tablero se renderiza directamente en la terminal.
emulate.py→ Controla la ejecución del juego, turnos y renderizadosolution.py→ Implementación de la IA (AIPlayer)board.py→ Lógica del tablero (no incluido aquí)player.py→ Clase base de jugador humanoaux_funcs.py→ Funciones auxiliares (vecinos, posiciones, etc.)
La clase AIPlayer extiende a HumanPlayer y redefine el método move() para elegir automáticamente la mejor jugada.
Para cada movimiento posible:
- Se simula la jugada en una copia del tablero
- Se evalúa el tablero usando un algoritmo de caminos mínimos
- Se selecciona la jugada con menor coste
Si hay empate, se elige una opción aleatoria entre las mejores.
Durante la evaluación del tablero:
- 0 → Casillas propias
- 1 → Casillas vacías
- Bloqueadas → Casillas del rival (no se pueden atravesar)
Se utiliza el algoritmo de Dijkstra (implementado con heapq) para calcular el camino mínimo entre los bordes objetivo del jugador.
- Solo se consideran como origen las casillas propias en el borde inicial
- Se exploran celdas adyacentes mediante
adjacent_cells() - Se ignoran completamente las casillas enemigas
- Se detiene cuando se alcanza el borde objetivo
Esto permite evaluar qué tan “cerca” está el jugador de ganar.
El archivo emulate.py gestiona:
- Selección del tipo de jugador (IA o humano)
- Inicialización del tablero
- Alternancia de turnos
- Renderizado en consola
- Verificación de victoria (
has_won) - Detección de empate (tablero lleno)
- Evaluación eficiente: Uso de Dijkstra para decisiones rápidas
- Simulación de jugadas: Analiza cada posible movimiento antes de elegir
- Desempate aleatorio: Evita comportamientos deterministas repetitivos
- Flexible: Permite múltiples modos de juego
- Estrategia greedy: Solo optimiza el turno actual
- Sin predicción del rival: No usa Minimax ni búsqueda en árbol
- Dependencia del estado actual: No planifica a largo plazo
Para ejecutar el juego:
python emulate.pyPor defecto se inicia un tablero de tamaño:
run_game(size=10)Puedes modificar el tamaño cambiando ese valor.
Este proyecto demuestra cómo aplicar algoritmos clásicos de grafos a un juego de estrategia como HEX.
La IA utiliza simulación de jugadas junto con Dijkstra para evaluar la conectividad del tablero, logrando un comportamiento sólido y eficiente, aunque con margen de mejora mediante técnicas más avanzadas de inteligencia artificial.