Está en la página 1de 19

“Universidad Nacional Mayor de San Marcos”

Facultad de Ingeniería de Software

Proyecto

Tres en Raya
Grupo 2

Curso: Análisis y Diseño de Algoritmos

Docente: Robert Elías Espinoza Domínguez

Integrantes:
● Alberto Miranda Anderson Leandro
● Artadi Ruiz, Gonzalo Joaquín
● Chávez Malca, Emerzon José
● Martinez Bravo, Martín AarónV
● Vallejo Pablo, Nilo Brayan

-2020-

Índice:
“Universidad Nacional Mayor de San Marcos”
1. Objetivos del proyecto: 3
2. Descripción del proyecto: 3
3. Requerimientos funcionales: 3
4. Alcances y limitaciones del proyecto: 3
Alcances 3
Limitaciones 4
5. Diagrama de clases: 5

6. Diccionario de las clases: 6

7. Algoritmos principales utilizados: 9


Algoritmo Minimax 9
Poda Alfa y Beta 11

8. Guía del usuario: 14

9. Referencias y bibliografía utilizada: 19

10. Conclusiones y recomendaciones: 20


“Universidad Nacional Mayor de San Marcos”

1. Objetivos del proyecto:


● Aprender el funcionamiento del algoritmo Minimax para aplicarlo en un juego de 3 en
raya.
● Crear un programa funcional del juego 3 en raya.
● Implementar eficientemente el algoritmo minimax en el programa de 3 en raya.

2. Descripción del proyecto:


El proyecto consiste en crear un programa que permitirá jugar 3 en raya tanto contra otro
jugador como contra la computadora mediante una interfaz GUI en Java. Implementará el
algoritmo minimax para el enfrentamiento contra la computadora.

Minimax es un método de decisión para minimizar la pérdida máxima esperada en juegos con
adversario y con información perfecta. Se trata de una técnica simple, pero limitada a
problemas sencillos.

Se pretende crear un programa funcional y que mediante la lectura de este documento permita
entender el funcionamiento del algoritmo mencionado a cualquier estudiante universitario.

3. Requerimientos funcionales:
- El juego tendrá la opción de jugar 1vsPC (contra la máquina).
- El ganador de la partida será quien logre alinear 3 elementos del mismo tipo de forma
horizontal, vertical o diagonal.
- El juego permitirá modificar el tipo de ficha usada por cada jugador.
- El juego tendrá la opción de modificar la apariencia del tablero de juego.
- El juego permitirá al usuario seleccionar el nivel de dificultad en el modo 1 vs PC
(contra la máquina).

4. Alcances y limitaciones del proyecto:


A. Alcances
- El juego tendrá formato .jar y será para escritorio.
- Se detallará lo más posible el código del juego para mejor comprensión por parte de
los lectores del mismo.
- Se pretende crear un solo modo, 1 Vs Pc. En él habrá niveles de dificultad respecto a
la actitud de la máquina frente al usuario
- Se pretende agregar cambios de fichas de juego y de fondo del tablero.

B. Limitaciones
- No se pretende crear una versión web del juego.
- El proyecto se centrará en el enfoque de eficiencia y dejará al segundo plano el
estético.
“Universidad Nacional Mayor de San Marcos”
- El desarrollo se llevará a cabo por estudiantes con poca experiencia en desarrollo de
juegos.
- Solo implementaremos el uso de mouse en la interfaz. El teclado no podrá usarse para
jugar.
- No se pretende crear un modo tutorial dentro del juego, además de ser intuitivo
contará con un manual de usuario.

5. Diagrama de clases:
“Universidad Nacional Mayor de San Marcos”

6. Diccionario de las clases:


JuegoLogica

Objetivo Posee todas las acciones y reglas del juego 3 en raya. Mas no se encarga de jugar.

Atributos Tablero: int[] Tablero de 3 en raya

Humano: int Valor usado para representar los lugares donde jugó el humano
en el tablero

Oponente: int Valor usado para representar los lugares donde jugó el
oponente en el tablero.

Métodos getTablero(): int[9] Devuelve el tablero de juego

getHuman(): int Devuelve el valor (O o X) con el que jugará el humano

getOponente(): int Devuelve el valor (O o X) con el que jugará el oponente

getLength(): int Devuelve el tamaño del tablero

reset(): void Reinicia el tablero

crearNuevaPieza(pie Coloca una pieza en una de las posiciones disponibles


za:int, posición:int):
void

posicionLibre( posic Determina si una posición está libre


ion:int): boolean

ganador( pieza:int): Determina si existe un ganador en el estado actual del juego


boolean

copiar(): Copia todo el tablero


JuegoLogica

IA

Objetivo Encargado de realizar las jugadas de la computadora


Dependiendo de la elección del usuario realiza jugadas óptimas o aleatorias

Métodos minimax(bool flag): Realiza jugadas óptimas mediante el algoritmo minimax


int

getRandomMov( ga Realiza jugadas aleatorias.


meLogic:GameLogi
c): int

TableroJuego
“Universidad Nacional Mayor de San Marcos”
Objetivo Interfaz gráfica de usuario (GUI) que muestra el tablero y las acciones tomadas por
los jugadores.

Atributos BtnTablero: GUI del tablero de juego


JButton[9]

juego: MenuJuego Objeto de la clase MenuJuego

IA: IA Objeto de la clase IA

juegoLogica: Objeto de la clase JuegoLogica


JuegoLogica

BtnRetroceder: Botón para realizar la acción de retroceder


JButton

BtnReiniciar: Botón para realizar la acción de reiniciar


JButton

ModoDificil: Variable para determinar si el usuario habilita o no el modo


boolean difícil

Métodos setModoDificil(Mod Hace que el computador juegue usando el algoritmo minimax


oDificil:boolean):
void

getFrame(): JFrame Devuelve el frame actual

modoDificil(action: Desarrolla el juego de 3 en raya con el algoritmo minimax


ActionEvent): void

modoFacil(action:A Desarrolla el juego de 3 en raya con el algoritmo aleatorio


ctionEvent): void

reset(): void Reinicia el tablero gráfico cuando se da clic en el botón


retroceder

reset(action:ActionE Reinicia el tablero gráfico cuando se da clic en el botón


vent): void reiniciar

gameOver(): void Muestra los resultados una vez que el juego finaliza

eventoRegresar(): Regresa al menu del juego


void
“Universidad Nacional Mayor de San Marcos”

MenuJuego

Objetivo Interfaz gráfica de usuario (GUI) que sirve de menú principal

Atributos modo: Modo Objeto de la clase Modo

tablerojuego: Objeto de la clase TableroJuego


TableroJuego

BtnSalir: JButton Botón para realizar la acción salir

opcion: Opcion Objeto de la clase Opcion

BtnInicio: JButton Botón para realizar la acción cambiar Pantalla

BtnOpcion: JButton Botón para realizar la acción cambiar Pantalla

Métodos configurarFrame(): Configura el tamaño y la posición de un JFrame


void

eventoSalir(): void Cierra el programa

eventoInicio(): void Redirige al frame Modo

eventoOpcion(): Redirige al frame Opcion


void

Modo

Objetivo Interfaz gráfica de usuario (GUI) que sirve para elegir la dificultad

Atributos Menu: MenuJuego Objeto de la clase MenuJuego

BtnFacil: JButton Botón para realizar la acción eventoFacil

BtnDificil: JButton Botón para realizar la acción eventoDificil

BtnAtras: JButton Botón para realizar la acción eventoAtras

Métodos eventoFacil(): void Elige el algoritmo aleatorio para el juego de 3 en raya

eventoDificil(): void Elige el algoritmo minimax para el juego de 3 en raya

eventoAtras(): void Retrocede al menú del juego


“Universidad Nacional Mayor de San Marcos”

Opcion

Objetivo Interfaz gráfica de usuario (GUI) que sirve para cambiar características estéticas del
trabajo

Atributos Menu: MenuJuego Objeto de la clase MenuJuego

BtnCambiarX: Botón para realizar la acción eventocambiarX


JButton

BtnCambiarO: Botón para realizar la acción eventoCambiarO


JButton

BtnCambiarFondo: Botón para realizar la acción eventoCambiarFondo


JButton

BtnAtras: Jbutton Botón para realizar la acción eventoAtras

Métodos eventoCambiarX(): Permite escoger otra imagen para reemplazar a X


void

eventoCambiarO(): Permite escoger otra imagen para reemplazar a O


void

eventoCambiarFond Permite cambiar el fondo


o(): void

eventoAtras(): void Regresa al menu del juego

7. Algoritmos principales utilizados:

Algoritmo Minimax
❖ Algoritmo de decisión para minimizar la pérdida máxima aplicada en juegos de
adversarios
❖ Información completa (cada jugador conoce el estado del otro)
❖ Elección del mejor movimiento para cada jugador, suponiendo que el contrincante
escogerá el peor
❖ El espacio de estados se representa mediante árboles alternados, donde:
➔ Nodo: Representa una situación del juego
➔ Sucesores de un nodo: Situaciones del juego a las que se accede por
movimientos legales aplicando sus reglas
➔ Nivel: Contiene todas las situaciones posibles para uno de los jugadores

❖ El algoritmo Minimax es un procedimiento recursivo y el corte de la recursión está


dado por alguna de las siguientes condiciones:
➔ Gana algún jugador
➔ Se han explorado N capas, siendo N el límite establecido
“Universidad Nacional Mayor de San Marcos”
➔ Se ha agotado el tiempo de exploración
➔ Se ha llegado a una situación estática donde no hay grandes cambios de un
nivel a otro.

Representación de los juegos


● Posición inicial.
● Conjunto de operadores o reglas del juego (definen movimientos legales)
● Estado terminal
● Función de utilidad, ej. gana, pierde, empata

Pasos del Algoritmo Minimax


1. Generación del árbol de juego. Se generarán todos los nodos hasta llegar
a un estado terminal.
2. Cálculo de los valores de la función de utilidad para cada nodo terminal.
3. Calcular el valor de los nodos superiores a partir del valor de los inferiores.
Alternativamente se elegirán los valores mínimos y máximos representando los
movimientos del jugador y del oponente, de ahí el nombre de Minimax.
4. Elegir la jugada valorando los valores que han llegado al nivel superior.

❖ El algoritmo explorará los nodos del árbol asignándoles un valor numérico mediante
una función de utilidad, empezando por los nodos terminales y subiendo hacia la raíz.
❖ Colocar 0 ó 1 en los nodos terminales dependiendo si gana MIN o MAX

❖ La función de utilidad definirá lo buena que es la posición para un jugador cuando la


alcanza.
❖ Se requiere de una estrategia que garantice llegar a estados terminales ganadores
independientemente de lo que haga el oponente.
❖ Un valor positivo indica la ventaja de un jugador y uno negativo la ventaja del otro.
❖ El jugador que espera valores positivos se conoce como maximizador
❖ El jugador que espera valores negativos se conoce como minimizador
❖ El maximizador busca movimientos que lo conduzcan al mayor número positivo.
❖ El minimizador busca movimientos que lo conduzcan al menor número negativo.

❖ El maximizador:
➔ Puede esperar llegar a un valor de 8
➔ Sabe que el minimizador puede escoger un movimiento que lo lleve a un valor
de 1
“Universidad Nacional Mayor de San Marcos”
❖ Desde el punto de vista de el maximizador, el minimizador puede escoger 2 ó 1
❖ Los resultados de un nivel determinan la acción y el resultado del nivel inmediato
superior.

Poda Alfa y Beta


❖ Mejora del Algoritmo Minimax; aplicado en juegos de adversarios por turnos
❖ Se aplica en espacios de estados demasiado grandes como para analizar todos los nodos
❖ La información es imperfecta; es decir, no se conoce el estado del contrincante. P. ejem.
En juegos donde no se ve el tablero del adversario

Características de la Poda Alfa-Beta

❖ Omitir la expansión de nodos que por sus valores no pueden ser los mejores (peores).
❖ Interrumpe la búsqueda en algún nivel y aplica evaluaciones heurísticas a las hojas
(profundidad limitada)
❖ Si el valor del nodo MAX (alfa) es menor que el más alto hasta este momento,
entonces omitir nodo.
❖ SI el valor del nodo MIN (beta) es mayor que el nodo más bajo hasta el momento,
entonces omitir nodo.
❖ Alfa-Beta permite búsqueda dos veces más profunda.
❖ Ordenamiento de los operadores, resultante del conocimiento o experiencia.
❖ Únicamente importa el orden y no los valores exactos.
❖ La poda no afecta al resultado final.
❖ Alfa-Beta es una mejora del algoritmo Minimax que evita revisar porciones dominadas del
árbol, que no pueden proveer información útil sobre la jugada siguiente.
❖ Alfa-Beta es un algoritmo de búsqueda en profundidad, rama y cota, que avanza por el
árbol en un orden ya fijado (p.ej., de izquierda a derecha) y va usando la información
de la valuación de los nodos hoja para podar ramas dominadas que no sirven para cambiar el
valor Minimax del nodo inicio (la jugada inminente).
“Universidad Nacional Mayor de San Marcos”

Estructuras de datos

Dos variables deben recordarse a lo largo de la búsqueda:


➔ Alfa: Límite inferior encontrado hasta ese momento.
➔ Beta: Límite superior.
❖ En los niveles maximizantes donde MAX debe optar, sólo Beta se usa para podar la
búsqueda
❖ En los niveles minimizantes donde MIN debe optar, sólo Alfa se usa para podar.
❖ Alfa-Beta es el algoritmo más usado para buscar en árboles de juegos.

Origen del nombre Alfa

Alfa es el nombre del mejor valor m, para MAX, encontrado hasta ahora en su ruta de búsqueda
en un nivel de MIN.
➔ Si n es peor que Alfa, MAX lo evitará ⇒ podar esa rama punteada
➔ m y n son nodos de MIN

Algoritmo de búsqueda Alfa-Beta


“Universidad Nacional Mayor de San Marcos”

Corresponde a la combinación de tres aportes:


➔ Ejecutar Minimax
➔ Mantener recordados Alfa y Beta
➔ Podar

Comportamiento de los nuevos algoritmos de búsqueda en juegos

❖ Alfa-Beta busca solamente 3/4b de los b movimientos posibles desde una posición dada
de juego.
❖ Esto significa que la profundidad de búsqueda se puede incrementar por un factor = log
b / log b ~= 4/3 por encima de una búsqueda exhaustiva Minimax.
❖ B es aquí el factor de ramificación efectivo.
❖ Si los sucesores se ordenan a la perfección (definido como que al usar Alfa-Beta la
búsqueda es mínima), Alfa-Beta examina 2bd/2 - 1 posiciones de juego.
❖ Así tenemos

8. Guía del usuario:


Portada:
Esta es la guía de usuario del juego “Tic - Tac - Toe Game” creado por el grupo 2 para el curso de
análisis y diseño de algoritmos. Se definirá a continuación todas las funcionalidades presentes en el
software para ayudar al usuario a evitar confusiones durante el uso del mismo.

Introducción:
El juego “Tic - Tac - Toe Game” tiene como finalidad entretener a sus usuarios y fomentar en ellos la
desesperación, pues en el modo difícil jamás podrán vencer al árbol de decisiones implementado.

Requisitos previos
Para ejecutar el juego “Tic - Tac - Toe Game” en su ordenador, usted deberá tener instalada la última
versión de java.

Explicación del funcionamiento


Al dar doble click sobre el ejecutable del juego “Tic - Tac - Toe Game”, que tiene por nombre
TicTacToe Game.jar, usted verá la siguiente interfaz.
“Universidad Nacional Mayor de San Marcos”

En ella podrá ver 3 opciones disponibles.


Empezar juego
Le permitirá empezar el juego con las configuraciones que usted haya elegido. Si usted no ha
configurado en absoluto empezará por defecto con el fondo negro y los caracteres X y O para usted y
el ordenador, respectivamente.
“Universidad Nacional Mayor de San Marcos”
Opciones
Si usted desea personalizar su experiencia de juego en “Tic - Tac - Toe Game” podrá hacerlo usando
este botón. A continuación aparecerán 4 nuevas posibles elecciones como se aprecia en la imagen.

Caracter PC
Con este botón podrá asignarle un caracter que desee al ordenador. Si no configura este botón verá
que por defecto el caracter de PC es O.
A continuación verá el resultado tras modificar el caracter de PC.
“Universidad Nacional Mayor de San Marcos”

Caracter Humano
Con este botón podrá asignar un caracter que desee para usted. Si no configura este botón verá que
por defecto el caracter de PC es X.
A continuación verá el resultado tras modificar el caracter humano.
“Universidad Nacional Mayor de San Marcos”

.Cambiar Fondo

Este botón le permitirá cambiar el fondo a color blanco. Por defecto el fondo es negro, como ya se ha
visto anteriormente. Si desea pasar de fondo blanco a negro tan solo deberá volver a presionar el
botón.
A continuación verá la pantalla de juego resultante, obtenida tras presionar el botón y cambiar a fondo
blanco.
“Universidad Nacional Mayor de San Marcos”

Salir del juego


Este botón cerrará el juego. Todas las configuraciones que usted haya realizado quedarán invalidadas.

9. Conclusiones y recomendaciones:

Como se mencionó en la introducción del presente trabajo, el estudio se desarrolló según los
objetivos planeados. Por lo tanto, ahora es importante extraer conclusiones sobre el proyecto
realizado y finalizar con algunas recomendaciones, que constituyan un valor añadido para el
desarrollo del trabajo realizado.

Por tanto, la implementación del proyecto permite al equipo llegar a las siguientes conclusiones:

Debido a la magnitud del producto y el tiempo del que se disponía, optar por el algoritmo minimax
fue la decisión acertada, puesto que muestra eficiencia en respuesta, además de que su complejidad
algorítmica es menor que la de otros algoritmos. Por otra parte, su implantación resultó conveniente
para el equipo al no representar complicaciones ni dificultad mayor a la esperada.

También se concluye que el proyecto ha cumplido con su función principal, al convertirse en el reto
necesario para poner en práctica los conocimientos aprendidos, y sirve como base para los que se
dedicarán a la rama de IA.
“Universidad Nacional Mayor de San Marcos”
Las recomendaciones que brinda el equipo de desarrollos se muestran a continuación:

Gestionar las entregar de los miembros del equipo es fundamental para conseguir los resultados
esperados, más aún en cuestiones relacionadas con la programación remota, esto también debe incluir
el apoyo necesario para los miembros que tengan dificultades en el desarrollo de la parte que les fue
encomendada.

Antes de la implantación de algoritmos es fundamental entender el funcionamiento interno del


algoritmo y mínimamente poder expresarlo en palabras propinas, de manera que la codificación
permita al programador añadir mejoras, cambios, o enviar distintos datos a la función creada

Finalmente, y hablando de una etapa de presentación, se recomienda reforzar la parte estética visual
del programa, debido a la importancia que representa en un proyecto tan interesante como lo es el 3 en
raya. Este podría incluir aún más interfaces para hacer la experiencia del usuario más cómoda, además
de funcionalidades adicionales como su ingreso a la web.

10. Referencias y bibliografía utilizada:

Alkaraz, S. H., El-Seidy, E., & Morcos, N. S. (2020). Tic-Tac-Toe: Understanding the
Minimax Algorithm. Journal of Game Theory, 9(1), 1-7.

Sebastian Lague .(2018, Abril 28). Algorithms Explained – minimax and alpha-beta pruning
[archivo de video]. Recuperado de https://www.youtube.com/watch?v=l-hh51ncgDI

S. Sriram, R. Vijayarangan, S. Raghuraman and X. Yuan, "Implementing a no-loss state in


the game of Tic-Tac-Toe using a customized Decision Tree Algorithm," 2009 International
Conference on Information and Automation, Zhuhai, Macau, 2009, pp. 1211-1216, doi:
10.1109/ICINFA.2009.5205101.

Villacís, C., Fuertes, W., Bustamante, C., Zambrano, M., Torres, E., Aules, H., Tacuri, A., &
Basurto, M. (2014). Optimización del juego tres en raya con niveles de dificultad utilizando
heurísticas de inteligencia artificial. AtoZ: novas práticas em informação e conhecimento, 3(2), 95-
106. doi:http://dx.doi.org/10.5380/atoz.v3i2.41342

José Luis Iglesias Feria.[Descubriendo la Inteligencia Artificial]. (2016, Octubre 21). Nº 112:
IA Grafos - Poda Alfa-Beta (MiniMax). [archivo de video]. Recuperado de
https://www.youtube.com/watch?v=jYm8eU-N2MA

The Coding Train. (2019, Diciembre 21). Coding Challenge 154: Tic Tac Toe AI with
Minimax Algorithm. [archivo de video]. Recuperado de https://www.youtube.com/watch?
v=trKjYdBASyQ
“Universidad Nacional Mayor de San Marcos”

También podría gustarte