Tres en Raya Inteligente: Aprendizaje en Cada Jugada
Descubre cómo la Inteligencia Artificial transforma el clásico juego de Tres en Raya, aprendiendo y mejorando sus estrategias con cada partida. Una experiencia didáctica y fascinante para desarrolladores y entusiastas de la IA.
¡Comienza a Jugar!
1 / 10
🧠 Descripción General del Proyecto
Este proyecto reimagina el icónico juego de Tres en Raya (Tic Tac Toe) integrando un sistema de Inteligencia Artificial basado en Sistemas Expertos. Más allá de un simple juego, esta implementación sirve como una herramienta educativa, mostrando cómo una IA puede aprender y adaptarse. La máquina consulta una base de conocimiento dinámica, almacenada en un archivo .json, y si no encuentra una estrategia predefinida, aprende una nueva jugada, enriqueciéndose con cada interacción y partida. Es una introducción práctica al aprendizaje supervisado en un entorno simple.
Juego Clásico
Una interfaz familiar de Tres en Raya que facilita la interacción con la IA.
Sistema Experto
La IA toma decisiones estratégicas consultando una base de conocimiento.
2 / 10
▶️ Preparación y Ejecución
Poner en marcha el proyecto es sencillo y está diseñado para ser accesible rápidamente. Antes de ejecutar el juego, asegúrate de tener Python 3 instalado en tu sistema, ya que es el lenguaje base de este proyecto. Puedes verificar tu versión de Python abriendo una terminal y escribiendo python --version o python3 --version.
Una vez que tengas Python, solo necesitas clonar el repositorio del proyecto o descargar los archivos directamente a tu máquina. La estructura de archivos está organizada para una fácil navegación y comprensión.
Python 3
Asegúrate de tener la última versión instalada.
Clonar Repositorio
Descarga los archivos del proyecto desde GitHub.
Acceso a Terminal
Necesario para ejecutar los comandos.
3 / 10
📁 Estructura de Archivos
El proyecto se encuentra en la carpeta tres_en_raya/, la cual contiene todos los elementos necesarios para su funcionamiento. Es crucial que el archivo conocimiento.json exista desde el inicio, incluso si está vacío, ya que la IA lo utilizará para almacenar y consultar su base de conocimiento. Esta separación de archivos facilita la modularidad y el mantenimiento del código.
La subcarpeta utils/ alberga módulos auxiliares, como tablero.py, que maneja la lógica de representación y actualización del tablero del juego. Esta organización permite que el archivo principal, main.py, se enfoque en la orquestación del juego y la interacción con la IA.
tres_en_raya/ ├── main.py ├── conocimiento.json └── utils/ └── tablero.py

El archivo conocimiento.json debe iniciar con un contenido base de [] (un arreglo vacío) para que el programa pueda funcionar correctamente y comenzar a registrar las jugadas.
4 / 10
🎮 Interacción con el Juego
Una vez que el programa está en marcha, la interacción es intuitiva. El juego comienza con un sorteo aleatorio para decidir quién inicia la partida, añadiendo un elemento de sorpresa. En cada turno, se te presentará una representación clara del tablero actual, numerado del 1 al 9 para facilitar la elección de tu movimiento.
Simplemente ingresa el número de la casilla vacía donde deseas colocar tu ficha (X u O, según tu rol). La máquina, por su parte, analizará su base de conocimiento para tomar la mejor decisión. Si no encuentra una jugada conocida para la situación actual, aprenderá una nueva al elegir una casilla al azar, registrando este nuevo patrón para futuras partidas.
1
Sorteo Inicial
El juego decide aleatoriamente quién empieza la partida.
2
Turno del Jugador
Ingresa el número de la casilla deseada (1-9).
3
Respuesta de la IA
La máquina juega basada en su conocimiento o aprende una nueva jugada.
4
Resultado y Opción de Reinicio
Al final, se ofrece jugar de nuevo, conservando el aprendizaje.
5 / 10
📚 Estructura de la Base de Conocimiento
El corazón de la inteligencia de este proyecto reside en el archivo conocimiento.json, que funciona como la "memoria" de la IA. Este archivo almacena cada jugada como un objeto JSON, permitiendo a la máquina registrar patrones de juego y sus resultados asociados. Cada objeto contiene información clave sobre el estado del tablero y la decisión tomada por la IA.
Un elemento crucial es el campo opcional "resultado", que indica si una jugada específica condujo a una derrota. Esta etiqueta es fundamental para el proceso de "aprendizaje" de la máquina, permitiéndole identificar y, con lógica adicional, evitar jugadas que la llevaron a perder en el pasado.
{ "estado": ["X", "O", "X", "", "", "", "", "", ""], "jugada_sugerida": 3, "resultado": "derrota" }
  • "estado": Representa el tablero en un momento dado, usando un arreglo de 9 elementos (índices 0 a 8) para cada casilla. "X", "O" o "" (vacío).
  • "jugada_sugerida": La posición (índice 0 a 8) que la máquina eligió en ese estado del tablero.
6 / 10
📈 El Aprendizaje Continúo de la IA
Lo fascinante de este sistema es su capacidad de auto-mejora. Cada vez que la máquina se enfrenta a una situación nueva (un estado de tablero para el cual no tiene una jugada registrada en conocimiento.json), elige una casilla disponible de forma aleatoria. Sin embargo, esta elección aleatoria no se olvida; en su lugar, se registra como una nueva entrada en la base de conocimiento.
Esto significa que, con cada partida, la base de datos de la IA crece, incorporando nuevas estrategias y patrones. A medida que juegas más, la IA acumula más "experiencia", lo que le permite tomar decisiones más informadas en el futuro. Este proceso, aunque simple, emula los principios básicos del aprendizaje por refuerzo.
Ejemplo práctico: Si la IA pierde una partida con una jugada específica, esa entrada puede ser marcada con "resultado": "derrota". En futuras implementaciones, esta información podría usarse para evitar o ponderar negativamente esas jugadas.
7 / 10
🔄 Reinicio y Persistencia del Juego
Una de las características clave de este proyecto es la persistencia del aprendizaje de la IA. Al finalizar cada partida, el programa te preguntará:
¿Deseas jugar otra vez? (s/n):
Si respondes s (sí), el juego se reiniciará para una nueva partida, pero, y esto es importante, la base de conocimiento acumulada se mantendrá intacta. Esto significa que todas las jugadas que la IA "aprendió" en partidas anteriores seguirán disponibles y serán utilizadas en las nuevas rondas. Esta continuidad permite observar cómo la IA mejora su desempeño a lo largo del tiempo.
Si, por el contrario, respondes n (no), el programa finalizará, pero la base de conocimiento en conocimiento.json permanecerá guardada en tu disco duro, lista para ser utilizada en futuras sesiones de juego.
Continuar
Juega una nueva partida manteniendo el aprendizaje de la IA y el registro de jugadas.
Salir
Finaliza el programa, pero guarda la base de conocimiento para futuras sesiones.
8 / 10
🛠 Notas Técnicas Adicionales
Este proyecto no solo es una demostración de IA, sino también un ejemplo de buenas prácticas en desarrollo de software. Se han incorporado varias consideraciones técnicas para asegurar una experiencia de usuario fluida y un sistema robusto.
Validación de Entradas
El programa verifica que el usuario no intente colocar una ficha en casillas ya ocupadas, evitando errores en la interacción.
Persistencia Total
Todas las jugadas aprendidas por la IA se guardan de forma permanente en conocimiento.json, asegurando que el progreso no se pierda.
Potencial de Mejora
La máquina "aprende" al registrar jugadas, y su inteligencia puede escalar significativamente si se amplía la lógica de evaluación, por ejemplo, priorizando jugadas ganadoras o evitando las perdedoras.
Estas consideraciones aseguran que el proyecto no solo sea funcional, sino también un buen punto de partida para futuras expansiones y mejoras en el aprendizaje de la IA.
Créditos: E. Hernández, Universidad San Pablo de Guatemala.
Made with