Download Universidad Autónoma de Baja California Programación Lógica

Document related concepts
no text concepts found
Transcript
Universidad Autónoma de Baja California
Programación Lógica
Proyecto Final – Semestre 2011-2
El proyecto final para Programación Lógica será la elaboración de una aplicación
en la que se utilicen Java y Prolog. Esta aplicación permitirá que un usuario juegue
Timbiriche con la computadora.
Timbiriche es un juego de lápiz y papel donde un poco de azar y estrategia se
presentan. Se juega sobre una hoja de papel, a modo de tablero, por dos, tres y hasta
cuatro jugadores. Se puede jugar con cualquier tamaño de tablero, pero lo más común es
que el tamaño dependa de la cantidad de jugadores. (Figura 1).
Figura 1
Los puntos en forma de cuadrícula deben ser, proporcional a la cantidad de
participantes, suficientes que permita a todos jugar para hacerlo divertido, pues el objetivo
es el de completar cuadritos, y así obtener la mayor cantidad de cuadritos posibles sobre
el papel.
En cada jugada, de forma alternada, un jugador unirá dos puntos consecutivos
horizontales o verticales que no hayan sido conectados como se muestra en la Figura 2.
Los cuadritos se van formando lado por lado, línea por línea, y las líneas diagonales no
son permitidas en el juego.
Figura 2
Cuando un jugador completa un cuadrito conectando esos puntos, ganará
puntuación. Con cada cuadrito que el jugador cierra ganara 10 puntos, además el cuadrito
deberá de identificase escribiendo una inicial en el centro o marcándola con un color
distintivo como se muestra en la Figura 3. Después de que un jugador forma un cuadrito,
está obligado a seguir jugando.
M.C. Pablo M. Navarro Álvarez
Página. 1
Universidad Autónoma de Baja California
Programación Lógica
Proyecto Final – Semestre 2011-2
Figura 3
El juego termina cuando no haya más puntos para conectar y el vencedor del juego
será el jugador que haya conseguido mayor puntuación.
Usted deberá desarrollar una aplicación que permite jugar Timbiriche en la
computadora. La aplicación deberá presentar al usuario una interfaz grafica elaborada con
Java de manera que solo se permita el jugar con dos jugadores (Humano-Computadora).
Por otro lado, en Prolog se desarrollará la parte inteligente de la aplicación que
permitirá decidir las jugadas a hacer, en el caso de que el usuario sea la Computadora.
Para decidir la jugada a realizar, se puede aplicar la regla de la cadena más larga. Para
conocer como funciona esta regla, puedes consultar el siguiente enlace:
http://www.math.ucla.edu/~tom/Games/dots&boxes.html. Además Prolog determinara la
situación del tablero para mostrarlo actualizado y en su caso, designar a un ganador.
Para ver una demostración de cómo funciona el juego Timbiriche y puedas tener
una idea de lo que tienes que desarrollar, puedes visitar el sitio Game Gecko en la
siguiente dirección electrónica: http://www.gamegecko.com/game/708/dots-and-boxes
RESTRICCIONES

La aplicación solo permitirá la opción de juego Humano – Computadora, para lo
cual el jugador computadora, deberá aplicar un algoritmo inteligente en prolog
para determinar sus jugadas. Esto significa que no podrá seleccionar al azar la
posición a jugar sino que deberá analizar el estado del tablero de juego y con base a
esto, determinar la mejor posición para su jugada.

Cada vez que se haga un movimiento sobre el tablero, el programa deberá
revisar mediante una rutina en Prolog si hubo un ganador.

Cada vez que prolog identifique que se ha generado uno o varios cuadritos, de
alguna forma deberá indicarlo para que pueda ser mostrado en la interfaz de java.

Cada vez que prolog identifique que se ha generado uno o varios cuadritos deberá
acumular la puntuación al jugador que corresponde y proveerle la información a
java para que la muestre a través de su interfaz.
M.C. Pablo M. Navarro Álvarez
Página. 2
Universidad Autónoma de Baja California
Programación Lógica
Proyecto Final – Semestre 2011-2

La interfaz de usuario se construirá con Java pero la lógica del juego deberá
implementarse mediante Prolog.

El tamaño del tablero de juego será estático, teniendo una dimensión de 5
renglones por 6 columnas pudiendo generar 20 cuadros con un valor de 10 puntos
cada uno.

El trabajo podrá realizarse en equipos de 2 estudiantes.
CONSIDERACIONES PARA LA EVALUACIÓN
1. Presentación estética del juego.
2. Implementación de todas las especificaciones.
3. Documentación del código fuente de Java.
4. Documentación del código fuente de Prolog.
5. Explicación verbal del funcionamiento, que predicados se han definido
y porque, que problemas resuelven cada uno de ellos y como se
relacionan unos con otros, etc.
6. Claridad del Código.
7. Redacción, gramática y ortografía en comentarios y mensajes.
8. Funcionamiento de la aplicación.
UNA PROPUESTA DE SOLUCIÓN
Tenemos un tablero de timbiriche como se muestra en la Figura 1 donde los
renglones los numeramos de arriba hacia abajo (0, 1,2,…5) y las columnas de izquierda a
derecha (0, 1,2,…6).
Tendremos líneas que dibujaras de forma horizontal y de forma vertical. Cada línea
horizontal que dibujes queda determinada por dos parámetros (i, j), lo cual significa que es
la línea en el renglón i que va de la columna j a la j+1.
De la misma forma, cualquier línea vertical requiere de dos parámetros (i, j), sólo
que ahora estos valores representan que la línea está en la columna j y va de la fila i a la
i+1.
Podemos entonces crear dos arreglos bidimensionales H y V de valores booleanos,
true o false, v o f, o de 1’s y 0’s, donde H te indicara cuales líneas horizontales ya han sido
trazadas y V te indicara cuales líneas verticales ya lo están.
M.C. Pablo M. Navarro Álvarez
Página. 3
Universidad Autónoma de Baja California
Programación Lógica
Proyecto Final – Semestre 2011-2
Esto es:


Si H [i, j] es true, significa que la línea del renglón i que va de la columna j a
la j+1 ya ha sido trazada.
si V [i, j] es true, significa que la línea de la columna j que va desde el
renglón i al renglón i+1 ya ha sido trazada.
Con esto tendremos representado el estado del juego en todo momento, y éste
terminará cuando todas las entradas de los dos arreglos sean true.
Ahora bien, cuando se trazas una línea horizontal sólo hay dos cuadrados que
pueden cerrarse y análogamente sucede con una línea vertical, de manera que, al trazar la
línea H[i, j] se debe verificar si las otras aristas del cuadrado de arriba o del de abajo ya
están trazadas. Las tres líneas del cuadrado superior son:
a) H[i-1, j], V[i-1, j] y V[i-1, j+1]
mientras que las del cuadrado inferior son:
b) H[i+1, j], V[i, j] y V[i, j+1]
Entonces, al trazar la línea horizontal en la fila i que va de la columna j a la j+1 (la
correspondiente a H[i, j]) se debe verificar si las tres aristas del cuadro superior (a) son
todas true o bien si todas las aristas del cuadro inferior (b) son true.
Un análisis similar haces para cuando se trazan las líneas V[i, j]. En este caso
tenemos que considerar:
c) V[i, j-1], H[i, j-1] y H[i+1, j-1]
d) V[i, j+1], H[i, j] y H[i+1, j]
Falta aun considerar algunos casos, por ejemplo cuando la linease trace en un
extremo del tablero ya que en ese caso, la línea sólo puede estar cerrando a lo sumo un
cuadrado. Además, cada vez que una raya cierre un cuadrado se tendrá que ver si puede
cerrarse otro más para desarrollar la cadena de cuadrados así como implementar la estrategia
ganadora.
La fecha de entrega será el día: 29 de Noviembre de 2011, a las 9:30 a.m. En el
momento en el que nadie esté listo para entregar se considerara que terminó la sesión de
revisión. No habrá revisiones tardías!!!
M.C. Pablo M. Navarro Álvarez
Página. 4