Skip to content

falmart/Hexagame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧠 Proyecto de IA para HEX

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

🎮 Descripción del juego

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.


🗂️ Estructura del proyecto

  • emulate.py → Controla la ejecución del juego, turnos y renderizado
  • solution.py → Implementación de la IA (AIPlayer)
  • board.py → Lógica del tablero (no incluido aquí)
  • player.py → Clase base de jugador humano
  • aux_funcs.py → Funciones auxiliares (vecinos, posiciones, etc.)

⚙️ Funcionamiento de la IA

La clase AIPlayer extiende a HumanPlayer y redefine el método move() para elegir automáticamente la mejor jugada.

🧮 Estrategia utilizada

Para cada movimiento posible:

  1. Se simula la jugada en una copia del tablero
  2. Se evalúa el tablero usando un algoritmo de caminos mínimos
  3. Se selecciona la jugada con menor coste

Si hay empate, se elige una opción aleatoria entre las mejores.


🔢 Modelo de costes

Durante la evaluación del tablero:

  • 0 → Casillas propias
  • 1 → Casillas vacías
  • Bloqueadas → Casillas del rival (no se pueden atravesar)

🛠️ Algoritmo principal

Se utiliza el algoritmo de Dijkstra (implementado con heapq) para calcular el camino mínimo entre los bordes objetivo del jugador.

📌 Detalles clave de implementación

  • 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.


🔁 Flujo del juego

El archivo emulate.py gestiona:

  1. Selección del tipo de jugador (IA o humano)
  2. Inicialización del tablero
  3. Alternancia de turnos
  4. Renderizado en consola
  5. Verificación de victoria (has_won)
  6. Detección de empate (tablero lleno)

✅ Ventajas

  • 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

⚠️ Limitaciones

  • 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

▶️ Ejecución

Para ejecutar el juego:

python emulate.py

Por defecto se inicia un tablero de tamaño:

run_game(size=10)

Puedes modificar el tamaño cambiando ese valor.


🧠 Conclusión

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages