Você está na página 1de 19

Juego Humano Maquina Nine Men

FISI Universidad Nacional Mayor de San Marcos



Resumen

Este trabajo ser desarrollado para el curso de Inteligencia Artificial, el tema de investigacin es el juego:
NINE MEN, la idea bsica es la de un tres en lnea, pero ms complejo; aqu el tablero est
conformado por tres cuadrados concntricos, uno dentro del otro, unidos por lneas que parten desde los
lados y juntan el cuadrado ms pequeo con el ms grande, desde la mitad de cada lado y desde los
vrtices. Se inicia la partida con el tablero vaco. Cada jugador posee en sus manos un total de 9 piezas
(generalmente canicas, bolitas o fichas chatas) que deber ir colocando dentro de cada una de los 24
puntos de interseccin marcadas en el tablero. Esto lo realizan por turnos intercalados, siempre con el
objetivo ltimo de lograr un tres en lnea. Para la solucin de este juego se desarrollar un programa
utilizando el lenguaje LISP.

1.- INTRODUCCION

Este es el Nine Mens Morris, tambin conocido como el Juego del Molino, Mill, o
simplemente "el Morris". El juego moderno es de origen britnico, pero sus races son muy
antiguas y quizs puedan hallarse antecesores directos provenientes de Persia o de Egipto.

1.1. El Problema

El problema se basa en la capacidad para la realizacin de bsquedas por la cantidad
de niveles que se encuentran en el rbol de estados lo cual implica mayor capacidad de RAM,
es decir, restringe la cantidad de niveles para la realizacin de bsquedas al ser mucho mayor
de la que tiene la PC por consiguiente no permite culminar el juego.

1.2. Objetivos.

El objetivo general de este trabajo es:

Minimizar el nmero de movimientos de las piezas que contiene el juego hasta llegar a una
solucin.

Los objetivos particulares a cumplir en este trabajo de investigacin son los siguientes:

a. Reducir el tiempo de solucin del juego.
b. Sincronizar los movimientos de las piezas en juego.
c. Encontrar el camino mas corto para la solucin del juego.

1.3. Modelo de solucin.

1. Creacin de la matriz
defun Muestra (tablero)

2. Ingreso de ficha aleatorio del operador ser cualquiera de los 24 espacios en blanco.

3. El ingreso de fichas contina hasta colocar cada jugador sus nueve fichas.

4. Seleccionamos una ficha del tablero.

5. Verificacin si la ficha puede moverse hacia la derecha, izquierda arriba o abajo, segn
eleccin.

6. Se elige otra ficha a mover. Ir al paso 4 para poder mover la ficha.

7. Verificar si el jugador formo un molino (un tres en lnea) si se diera el caso se selecciona
una ficha del oponente para sacarla del tablero, si no lo est. Ir al paso 4.

8. Verificamos si el jugador puede realizar mas movimientos o si se a quedado sin fichas para
mover, en caso q se cumpla la verificacin se acabara el juego.

2.- PROBLEMA DE BUSQUEDA:

En nuestra primera aproximacin de la solucin del problema planteado representamos
inicialmente nuestro estado inicial y final de nuestro juego.


2.1. Planteamiento de la solucin.

En nuestra primera aproximacin de la solucin del problema planteado representamos
inicialmente nuestro estado inicial y final de nuestro juego.

ESTADO INICIAL

Una vez que hemos identificado nuestro estado inicial y fin comenzamos a identificar operadores
los cual nos permitirn ejecutar diferentes acciones.

El juego comienza cuando con un tablero vaci (9 piezas para cada jugador sin colocar) y se
desarrolla en 2 fases:

Durante la primera fase cada jugador en su turno coloca una de su nueve fichas sobre
cualquiera de los puntos del tablero que estn libres (intersecciones vacas). Si un jugador es
capaz de formar una fila de 3 piezas a lo largo de la lnea del tablero, consigue un molino y
puede eliminar una de las piezas de su oponente en el tablero; las piezas quitadas no podrn
ser colocadas de nuevo. Durante esta fase no es posible mover las fichas ya situadas en el
tablero.
En la segunda, colocada las 18 piezas del tablero, cada jugador en su turno mueve una de sus
fichas a lo largo de una lnea en el tablero a una interseccin vaca adyacente (a un punto
adyacente libre a travs de alguna de las lneas del tablero)


ESTADO FINAL

En consideracin que puede existir un nmero grande de posibles estados metas, definiremos
una condicin necesaria y suficiente para un estado meta. El juego acaba cuando a un jugador le
quedan menos de 3 fichas (no puede formar molinos) o se encuentra bloqueado (no puede
mover sus fichas)

2.2. Desarrollo experimental.

En nuestro desarrollo experimental identificamos los operadores y una vez teniendo el estado
inicial comenzamos a validar si se poda mover, de ser as realizamos los operadores, hasta
legar a la ubicacin o estado final.

Para el desarrollo en cdigo de nuestros operadores realizamos ejemplos en papel para as
poder identificar y sernos ms fcil la descripcin del cdigo. Al tomar nosotros nuestro tablero
como un arreglo manejamos tanto i como j lo cual validbamos como se movan a travs de
nuestro ejemplos hechos a mano.

3.- IMPLEMENTACION

En este punto explicaremos a grandes rasgos el modelo de implementacin de nuestro
programa.

Para el cual detallamos 4 de los movimientos mas importantes de la ficha:










mover-H-
derecha-ficha

mover-V-
abajo-ficha

mover-V-
arriba-ficha

mover-H-
izquierda-ficha

MOVIMIENTO DE LA FICHA

Primero se define la funcin para la ficha que tiene como parmetros i, j, x, y.

Donde:
i: punto horizontal actual
j: punto vertical actual
x: nueva posicin en la horizontal
y: nueva posicin en la vertical

Estos mtodos nos permiten conocer si la posicin en la cual estoy haciendo el movimiento
corresponde al tablero, devuelve un valor de verdad.





MOVER_V_ARRIBA

No se cumple si la ficha esta en cualquier punto con j=0.

MOVER_V_ABAJO
No se cumple si la ficha esta
en cualquier punto con j=0.


MOVER_H_DER
No se cumple si la ficha esta en
cualquier punto con i=0.


MOVER_H_IZQ
No se cumple si la ficha esta en
cualquier punto con i=0.
MOVER_CENTRAL_V_ARRIBA
Se cumple si la ficha esta en un
punto con j=0.


MOVER_CENTRAL_V_ABAJO
Se cumple si la ficha esta en un
punto con j=0.


MOVER_CENTRAL_H_DER
Se cumple si la ficha esta en un
punto con i=0.


MOVER_CENTRAL_H_IZQ
Se cumple si la ficha esta en un
punto con i=0.


METODOS PARA LOS MOLINOS

Primero se define la funcin para los molinos que tiene como parmetros i, j, jugador, tablero.

Donde:
i: punto horizontal donde se encuentra la ficha
j: punto vertical donde se encuentra la ficha
Jugador: para saber que fichas deben formar el molino
Tablero: tablero actual del juego

Estos mtodos nos permiten conocer si la posicin en la cual estoy haciendo el movimiento
formo un molino (un 3 en raya).



MOLINO_V_ARRIBA


Se verifica el molino si la ficha esta en cualquier punto que
se muestra.




MOLINO_V_CENTRO



Se verifica el molino si la ficha esta en cualquier punto que
se muestra.






MOLINO_V_ABAJO




Se verifica el molino si la ficha esta en cualquier punto que se muestra.




MOLINO_V_CENTRO_ARRIBA



Se verifica el molino si la ficha esta en cualquier punto con
j=3 y la ficha esta como se muestra.







MOLINO_V_CENTRO_MEDIO



Se verifica el molino si la ficha esta en la posicin pintada.







MOLINO_V_CENTRO_ABAJO


Se verifica el molino si la ficha esta en la posicin
pintada.








MOLINO_H_DER



Se verifica el molino si la ficha esta en cualquier punto que
se muestra.





MOLINO_H_CENTRO


Se verifica el molino si la ficha esta en cualquier punto que se
muestra.





MOLINO_H_IZQ


Se verifica el molino si la ficha esta en cualquier punto que se
muestra.





MOLINO_H_CENTRO_DER



Se verifica el molino si la ficha esta en cualquier punto que se
muestra.




MOLINO_H_CENTRO_MEDIO


Se verifica el molino si la ficha esta en cualquier punto que se
muestra.



MOLINO_H_CENTRO_IZQ


Se verifica el molino si la ficha esta en cualquier punto que se
muestra.



METODOS DEL PROGRAMA

GESTORPRINCIPAL

Crea el tablero de juego y tambin nos permite ingresar al men principal del programa:

INICIALIZAJUGADOR

Funcin que inicializa a los jugadores y inicializa el juego.
MUESTRA

Funcin que permite mostrar el tablero del juego.

MOVIMIENTOLEGAL

Funcin que comprueba que las coordenadas ingresadas por el humano pertenezcan al
tablero.



EXISTEFICHA

Verifica si en posicin que se desea colocar o mover una ficha se encuentra otra, devuelve
un valor de verdad o falsedad.





COLOCAFICHA

Simplemente se encarga de colocar una ficha en el tablero.



ELIMINAR_FICHA

Funcin utilizada cuando se forma un molino y se pasa a eliminar una ficha de la maquina.

ELIMINAR_FICHA2

Funcin utilizada cuando se forma un molino y se pasa a eliminar una ficha del humano.

VERIFICAR_MOLINO

Funcin que te indica si es que al realizar un movimiento o al colocar una ficha haz formado
un molino en el tablero.

TODOS_MOLINO

Funcin general donde se indica como parmetros al jugador y el tablero, para poder
verificar si hay un molino creado.

COLOCAR_HUMANO

Esta funcin llama a las funciones movimientolegal, existeficha y colocaficha; para poder
realizar la colocacin o movimiento de la ficha hecho por el humano.




PUEDEMOVER

Te indica si la ficha que deseo mover en la posicin ingresada es correcto en otras palabras si
es valido el movimiento que estoy realizando.

MOVERFICHA

Esta funcin primero llama a la funcin puedomover para poder realizar el movimiento
satisfactoriamente a las reglas.

REALIZARMOVIMIENTO

Funcin controladora, llama a todas las funciones para poder realizar el movimiento de la
ficha del humano adems te indica si en la posicin ingresada ya se encuentra una ficha.

MOVER_HUMANO

Funcin que llama a realizar movimiento y le ingresa como parmetros la posicin inicial y la
posicin en la que quiero colocar la ficha.

TURNOBLANCAS y TURNONEGRAS

Estas 2 funciones se utilizan cuando un jugador realiza un molino, y se le indica que ingrese
la posicin donde se encuentra la ficha a eliminar del oponente.

FUNCIONES PARA CONOCER SI YA TERMINO EL JUEGO

Todas estas funciones indican si una ficha puede realizar un movimiento, devuelven verdad
(T) o nill.

PUEDE_MOVER_CENTRAL_V_ARRIBA
PUEDE_MOVER_CENTRAL_V_ABAJO
PUEDE_MOVER_CENTRAL_H_DER
PUEDE_MOVER_CENTRAL_H_IZQ
PUEDE_MOVER_V_ARRIBA
PUEDE_MOVER_V_ABAJO
PUEDE_MOVER_H_DER
PUEDE_MOVER_H_IZQ

PUEDEMOVERSE

Llama a las funciones anteriores para conocer si todava puede haber movimientos en el
tablero.

COMPROBARVICTORIA

Funcin que verifica si en el tablero ya no existen ms movimientos posibles, si se da esta
verificacin entonces el jugador pierde y se acaba el juego.

COLOCAR_MAQUINA

Funcin utilizada al comienzo del juego, donde se colocan las 9 fichas de la maquina.

MOVER_MAQUINA

Funcin que permite que la maquina realice un movimiento, llama a los mtodos
puedemover y realizamovimiento.

ENCONTRAR_MAYOR

Esta funcin tiene como parmetro a la tabla auxiliar, aqu se trata de encontrar y guardar
en la tabla auxiliar la mejor opcin de tabla con mayor heurstica.




MOVIMIENTOLEGAL2

Funcin que comprueba que las coordenadas de movimiento nuevas para la maquina sean
legales.

FUNCION_EVALUACION

La funcin que nos permite conocer el valor de la heurstica de cada posible tablero optimo
que se de cmo parmetro

INICIALIZA_TABLERO_AUX

Funcin que crea un tablero para no alterar el tablero principal.

PARAMETROS Y VARIABLES GLOBALES

(SUBFUNCTION (DEFSETF JUGADOR-ULTIMO_MOVIMIENTO) (DEFSTRUCT
JUGADOR))

(SUBFUNCTION (DEFSETF JUGADOR-FICHAS_COLOCADAS) (DEFSTRUCT
JUGADOR))

(SUBFUNCTION (DEFSETF JUGADOR-FICHAS) (DEFSTRUCT JUGADOR))

(SUBFUNCTION (DEFSETF JUGADOR-TIPO_JUGADOR) (DEFSTRUCT
JUGADOR))

(SUBFUNCTION MAKE-JUGADOR (DEFSTRUCT JUGADOR))

(SUBFUNCTION MAKE-JUGADOR (DEFSTRUCT JUGADOR))

(DEFVAR JUGADORBLANCAS)

(DEFVAR JUGADORNEGRAS)

4.- PRUEBAS

4.1 Descripcin del sistema

Lenguaje de programacin: LispWorks Personal Edition 5.0.1
Sistema Operativo: Microsoft Windows

4.2 Dificultades

El lenguaje de programacin utilizado para este juego no cuenta con herramientas necesarias
para realizar una aplicacin en la cual el usuario interactu de manera directa con el programa,
no podemos crear interfaces graficas para un mejor diseo del juego; por lo cual optamos por
realizar mens que puedan ayudar al entendimiento de la aplicacin.

4.3 Resultados obtenidos

El juego comienza con el estado inicial presentado en los mtodos al inicio de la explicacin y el
jugador o humano puede indicar los movimientos necesarios para continuar con el juego; para
realizar un movimiento de ficha este debe indicar no solo la ubicacin de la ficha que desea
desplazar sino tambin la nueva ubicacin donde desea colocarla, para lo cual se representa un
formato del como debe ingresar estos datos de manera escrita. Una vez terminado el
movimiento se realiza automticamente el turno del computador mostrando al jugador
(humano) el nuevo tablero luego de que el computador realizo un movimiento.








5.- CONCLUSIONES

Las bsquedas a realizar por el trabajo son primero el mejor con ayuda del algoritmo MINIMAX
el cual nos permite conocer cual es la mejor opcin para el computador.

Una vez revisado los resultados obtenidos al ejecutar nuestro programa realizado verificamos
que si obtenemos el resultado deseado es decir que lleguemos a obtener que el computador
genere una respuesta al movimiento hecho por el humano, donde dicha respuesta es resultado
de los diferentes movimientos accesibles para el computador escogiendo el mejor de ellos
como movimiento optimo.

En un inicio solo realizamos los movimientos pero despus de correcciones pusimos una
funcin que nos permita obtener el mejor movimiento, esta funcin nos devolver el tablero
mas optimo posible para el computador.























6.- BIBLIOGRAFIA

http://www.lisp.org/alu/home
Powered by AllegroServe and Allegro WebActions
Copyright 2009, Association of Lisp Users

Você também pode gostar