Vous êtes sur la page 1sur 9

Universidad Sim n Bol var Departamento de Computaci n y Tecnolog a de la Informaci n Algoritmos y Estructuras I CI-2615 Sep-Dic 2004

Proyecto de Algoritmos I

1 Introducci n
En este proyecto, que tiene como n consolidar los conocimientos te ricos y pr cticos impartidos en este curso se pretende desarrollar un juego. En esta oportunidad hemos escogido al archi conocido juego de DOMIN . En los siguientes p rrafos presentaremos una breve descripci n del mismo. En la siguiente secci n presentaremos el problema concreto que queremos se resuelva en este trabajo. Un domin es una pieza (o piedra) rectangular que est formada por dos cuadrados unidos por una de sus aristas. En el interior de cada cuadrado se dibujan entre 0 y 6 puntos negros que representan los n meros del 0 al 6. Un juego de domin consiste de todas las piezas de domin que se pueden formar de esta manera, 28 en total. El juego de domin es un juego popular que se juega t picamente entre cuatro personas. Estas personas se sientan en una mesa y, por lo general, cada par de personas que est n una frente a la otra forman un equipo. A cada jugador se le reparten siete piedras de domin y al empezar el juego cada uno por turno est obligado a colocar una de sus piezas que coincida con uno de los dos n meros que est n al nal de la cadena de piedras. Si no tiene una pieza adecuada para jugar pierde su turno. Gana el equipo del jugador que coloque todas sus piedras o si nadie puede jugar (el juego se tranca) gana el equipo cuyas piedras sumen menos.
Estructura del juego

Un juego de domin se compone de varias partidas. Al nal de cada partida, las parejas reciben puntos de acuerdo al resultado de la misma. El juego termina cuando una de las parejas alcanza o supera una cantidad de puntos previamente establecida, que por lo regular son 100 esta pareja pierde el juego. Cuando s lo son tres los jugadores se acostumbra repartir las todas chas entre los tres jugadores y la que sobre se coloca sobre la mesa para empezar. Tambi n hay quienes reparten s lo siete a cada jugador y dejan las restantes siete en la mesa para que las vaya tomando quien las necesite cuando no tenga piedras que jugar. En caso de ser dos los jugadores se suelen repartir siete piedras a cada jugador y las restantes se colocan sobre la mesa. A este conjunto de piedras las denominaremos: el pil n. cuando un jugador no tenga piedras que jugar debe 1

tomar una del pil n, si con ella puede jugar lo hace, de lo contrario debe continuar tomando del pil n hasta obtener una que pueda jugar o que se acabe el pil n.
Inicio del juego

Se colocan las chas en el centro de la mesa, cara abajo (nadie puede ver los puntos de las chas). Uno de los jugadores revuelve las chas, utilizando movimientos circulares con ambas manos. Una vez que las chas est n revueltas, cada jugador toma 7 y las coloca de pie frente a l, de tal forma que ning n otro jugador (ni siquiera su compa ero) pueda ver los puntos de las chas. Un jugador que tenga entre sus chas cinco o m s mulas, puede indicarlo al resto de los jugadores mostrando sus chas. Todos los jugadores regresan sus chas al centro para que sean de nuevo revueltas y tomadas. Este proceso puede repetirse hasta que ning n jugador tenga 5 o m s mulas en su mano. El jugador que posea la mula de seises es el primero en jugar, colocando esta cha en el centro de la mesa, cara arriba (mostrando los puntos). A partir de ese momento, los jugadores realizar n su jugada, siguiendo el sentido de las manecillas del reloj.

2 Planteamiento del Problema


En nuestro caso queremos que se escriba un programa que permita jugar el JUEGO DE DOMIN entre una persona y la computadora. No se asusten que la computadora no tiene que jugar inteligentemente. Realmente no se pide que se implemente el juego completo, s lo se requiere que se puedan hacer partidas sueltas y que despu s de cada partida se despliegue un mensaje indicando el resultado de la misma. El resultado debe incluir el ganador y los puntos que le quedaron en mano al perdedor. Qu se espera del juego? Al empezar un juego se le debe solicitar al usuario su nombre para colocarlo en alg n lugar adecuado en el tablero de juego. Si el usuario solicita un juego, se debe crear el mismo generando aleatoriamente un conjunto de siete piedras para el usuario, siete para la computadora y catorce para el pil n. Alerta rojo: se debe veri car que no se repitan ni falten piedras. (Ser a recomendable que los conjuntos de siete tengan a lo sumo cuatro dobles) Se le debe pedir al usuario un n mero que permita decidir a la computadora qui n empieza el juego. Tanto la computadora como el usuario pueden empezar jugando cualquier piedra. Se debe proveer el mecanismo para seleccionar qui n empieza. 2

(Es opcional obligar a jugar al principio un doble si el jugador que le toca empezar lo tiene) Cuando le toque el turno a la computadora se debe: 1. Elegir, si es posible, una de las piedras del conjunto de piedras de la computadora para jugarla siguiendo la estrategia descrita m s abajo, de lo contrario se debe seleccionar una de las piedras del pil n hasta que alguna se pueda jugar o se agote el pil n. Si no puede jugar debe anunciarlo, de lo contrario debe indicar que pieza jug . 2. Se deben hacer todos los cambios pertinentes en el tablero de juego. (Importa la creatividad.) 3. La estrategia de la computadora es: (a) Si tiene m s de una opci n de juego, jugar la piedra m s grande. (b) Si puede trancar, debe hacerlo si tiene menos piedras que su oponente. (c) Si una piedra la puede colocar, en cualquiera de los extremos de la cadena, colocarla en el extremo donde pueda trancar si le conviene seg n la regla anterior o en el extremo que le proporcione m s chance de juego para la pr xima jugada. (Los n meros que queden en los extremos proporcionen un m ximo del n mero de piedras que pueda jugar despu s de colocarla) (d) Se puede agregar reglas adicionales que hagan el juego de la computadora m s interesante. Cuando le toque el turno al usuario se debe poder: 1. Realizar su jugada: seleccionar la cha que desea jugar o tomar del pil n las chas necesarias para completar su jugada. 2. Se deben poder rechazar los intentos de realizar una jugada no v lida. Para ello se requiere un mecanismo para detectar si una jugada es v lida. 3. Proveer el mecanismo para que el usuario decida tomar una cha del pil n. Debe chequearse que el usuario, en efecto, no tenga piedras que jugar. (Debe rechazarse tomar del pil n si el usuario tiene piedras que jugar.) Una vez seleccionada la cha, el usuario debe poder elegir en que extremo jugarla, si tiene dos alternativas, de lo contrario la jugada debe completarse autom ticamente. 4. Debe chequearse que el usuario no pasa teniendo chas que pueda jugar. En cada caso se debe actualizar estado del juego. En todo momento el usuario debe tener la opci n de abandonar el juego. El programa debe brindar la facilidad de que el usuario pueda estar jugando nuevas partidas hasta que se canse y decida abandonar la aplicaci n. 3

El estado del juego se debe desplegar en una ventana que se dibujar usando la m quina de trazados. La misma debe tener a la derecha una regi n para dibujar las piedras del pil n que deben mostrarse por detr s y con un n mero del uno al catorce que las identi que. Las piedras del usuario deben mostrarse descubiertas por defecto. Las piedras de la computadora se deben mostrar sobre la mesa cubiertas. Lo que importa en este caso es cuantas son. Pero debe existir la opci n de mostrar las piedras de la computadora y mostrar las piedras del pil n. La primera piedra que se coloca debe colocarse en el centro de la regi n destinada para ello verticalmente si es un doble y horizontalmente si no lo es. Debe proveerse un mecanismo para intercambiar los turnos de los jugadores. Para lograr la apariencia visual del proyecto se usar la m quina de trazados que viene integrada con GaCeLa. Consultar en el GCLWiki las primitivas que provee la misma. Se quiere que en la misma ventana, si fuese posible, se representasen las piedras de los dos jugadores, las piedras del pil n y las piedras que se han ido jugando. La primer piedra jugada se representar en la parte central de la regi n destinada para tal n. Los dobles se dibujaran verticalmente mientras que las dem s piedras se dibujar n horizontalmente. Para complicar el proceso de dibujo, todas las piezas se dibujar n en la misma l nea. Sin embargo, no se prohibe si alguien quiere tomarse el trabajo de hacer los c lculos necesarios para cambiar la direcci n de colocaci n de las piezas.

2.1 Esquema que se Sugiere para el Programa

En base a los requerimientos se plantea el siguiente esquema del programa que se quiere desarrollar. | inicializarJuego do quieroJugar ! repartirFichas jarQuienEmpieza dibujarTableroInicial do noFin & noAbandono ! ejecutaJugada actualizaTablero cambiarJuagor ]|
od od

En este esquema se entiende que quieroJugar, noFin y noAbandono son variable que indican respectivamente que se quiere continuar jugando otra partida, que no se ha terminado la partida actual y que no se desea abandonar la partida o el juego. Se sugiere un n mero minimal de procedimientos con el n de permitir su ciente libertad en el dise o del programa. Se pueden a adir otros si se considera necesario. No se indica donde preguntarle al usuario si desea abandonar o si desea jugar otra partida. Queda a juicio de cada equipo donde hacerlo. Posiblemente en la pr xima versi n se den otras sugerencias al respecto. El programa debe mantener la informaci n sobre las piedras que usuario, las piedras de la computadora y las piedras en el pil n. Tambi n puede ser conveniente almacenar la informaci n sobre las piedras jugadas. Una manera de representar la piedras del domin puede ser usando una matriz de de enteros como se muestra:
2 28

2.2 Estructura de los Datos

0 0

0 1

0 2

0 3

0 4

0 5

0 6

1 1

1 2

1 3

1 4

1 5

1 6

2 2

2 3

2 4

2 5

2 6

3 3

3 4

3 5

3 6

4 4

4 5

4 6

5 5

5 6

6 6

Con esta representaci n de las chas del domin las piedras de cada jugador, el pil n y las chas jugadas se pueden representar como arreglos de tama o de booleanos. En base a esta representaci n barajar las chas consiste en generar n meros aleatorios entre 0 y 27 ambos incluidos y asignarlos al usuario y a la computadora. Mientras que dibujar las chas del usuario consiste en recorrer el arreglo que representa las chas del usuario y dibujar las marcadas true.
28

Tambi n hace falta mantener los valores actuales de las dos cabeceras de la cadena de chas colocadas y las coordenadas de posiciones donde empieza y termina la cadena de chas colocadas. Podr a ser til almacenar la secuencia de chas colocadas (Si se quiere por ejemplo usar estrategias m s elaboradas para el computador). Usted puede usar otra estructura de datos diferente: esto es s lo una sugerencia que no tiene por que ser la mejor. Adem s aqu s lo comentamos algunas de las estructuras de datos que nos parecen relevantes. Sientase libre de seleccionar otras estructuras que le permitan llevar a feliz t rmino su proyecto.

2.3 Material de Apoyo

1. Para la generaci n de n meros aleatorios revise algunos de los ejemplo del GCLWiki. ( http://gacela.ac.labf.usb.ve/GCLWiki) Uso del procedimiento: random. Despu s de usar: random r, la variable r de tipo double toma un valor entre r . Si se desea un entero entre 0 y n hay que multiplicar por
0 1

Realmente se puede usar random x1, x2, x3, ... 2. Para aprender a usar la m quina de trazados o incrementar sus destrezas en el uso de la misma revise ejemplos en el GCLWiki. P ngale particular inter s al uso de las aserciones de correcci n. 3. Consulte la guia del Prof. Oscar Meza por ejemplos de an lisis descendente. 4. Tambi n puede encontrar en el GCLWiki informaci n sobre el uso de los procedimientos y funciones en GCL.

n a r y truncar el valor. (usar toInt(r*n)+1). Buscar la acci n RANDOM.

3 Entregas

3.1 Primera entrega (Semana 10)

1. Escriba en GaCeLa el esqueleto de su programa. Declare las funciones y procedimientos que usar , indicando sus par metros formales. Los cuerpos no tiene que escribirlos. En su lugar haga que escriban un mensaje del estilo hago tal cosa, no estoy listo . (Los procedimientos escritos as se suelen llamar dummy) La intenci n es proveer un mecanismo para probar el ujo de control del programa. 2. Especi que y escriba un programa que baraje las chas, esto es, que haga la repartici n de las chas entre el usuario y la computadora. Las no repartidas son las del pil n. Los resultados, almacenados en las variable usadas como estructura de datos deben mostrarse en pantalla como tres listas: denominadas usuario, computadora y pil n. Se debe escribir en la pantalla el nombre de cada lista seguida por 7, 7 o 14 lineas que contienen cada una dos enteros que represente los tantos de cada cha. 3. Procedimiento que dibuje el tablero que representar el juego. El mismo debe contemplar una regi n para las piedras en el pil n, las piedras del usuario y las piedras de la computadora. Se requiere que se dibuje el tablero inicial. En esta etapa no se requiere que las piedras tengan pintados los tantos. Basta con dibujar los reversos. Aseg rese de escribir las condiciones de correcci n.

3.2 Segunda entrega (Semana 11)

En esta entrega el programa debe ser capaz de simular la realizaci n de partidas. Ello incluye inicializar el juego, repartir las chas, mostrar el tablero inicial con todos sus detalles y proveer la facilidad de terminar el ciclo de ejecuci n de partidas. En resumen se requiere: 1. Inicializar el juego 6

2. 3. 4. 5. 6.

Repartir las chas Seleccionar el jugador que empieza el juego Dibujar el tablero inicial con todos sus detalles Preguntarle al usuario si quiere una nueva partida
Lo que no se requiere es desarrollar el

DO interno

3.3 Entrega nal (Semana 12)

Para el d a de la revisi n usted deber llevar una versi n operativa del programa en GCL que permita jugar domin seg n las especi caciones indicadas en el planteamiento del problema. Es importante que el equipo trabaje de manera integrada. Durante la revisi n se veri car el funcionamiento del programa y se har un interrogatorio corto a cada miembro del equipo. La versi n operativa del programa se deber entregar al profesor en un disquete debidamente identi cado. Adem s, deber entregar un informe que describa en detalle todo el proceso de dise o y desarrollo de la soluci n. El informe no se debe limitar a reportar las actividades indicadas en este enunciado las actividades deben servir de gu a para elaborar el informe. En este sentido, se sugiere que se entregue un informe que contenga las siguientes secciones: Portada. Una hoja que contenga: Arriba a la izquierda el nombre de la universidad, carrera y materia. Centrado: nombre del proyecto. Abajo a la izquierda: nombre del profesor de laboratorio. Abajo a la derecha: nombre y carnet de los integrantes del equipo Introducci n: Breve descripci n del problema atacado en el proyecto. Contenido del informe. Dise o: Resultado del an lisis descendente del problema (Diferencias con el an lisis presentado en este instructivo). Demostraciones de correcci n (De las entregas). 7

Optimizaciones. Detalles de implementaci n. Estructuras de datos (Diferencias con el an lisis presentado en este instructivo). Lista de procedimientos y funciones indicando la relaci n de invocaci n ( qui n invoca a qui n?). C digo fuente documentado. Estado actual. Operatividad del programa: decir si funciona perfectamente o no. En caso negativo, describir las anomal as. Manual de operaci n: nombre del archivo a ejecutar y modo de operar el programa. Conclusiones. Resultados obtenidos. Di cultades presentadas. Recomendaciones. Bibliograf a. Libros, revistas o cualquier recurso bibliogr co consultado. Una referencia bibliogr ca debe incluir la siguiente informaci n: Libro: autor(es), nombre, editorial y a o. Art culo: autor(es), nombre, revista, volumen, n mero y a o. P gina Web: autor(es), nombre, url, fecha ltima visita. A continuaci n se muestran algunos ejemplos de referencias bibliogr cas: Libro: Blair, D.: Language and Representation in Information Retrieval. Elsevier Science Publisher, 1990. Revista: Isaacson, M.: What is SMDI?, Electronic Musician 9(6). p.7982 P gina Web: Sun Microsystems: The Java Tutorial. http://java.sun.com. Noviembre 2000. Sobre la ltima entrega. Al inicio de la clase de la semana 12, usted deber entregar en un sobre sellado y debidamente identi cado (nombre y carnet de los integrantes del equipo y nombre del proyecto):

Un disquete debidamente identi cado (nombre y carnet de los integrantes del equipo y nombre del proyecto) que contenga en el directorio ra z los archivos .gcl de su proyecto. El disquete debe estar libre de defectos f sicos y de virus. En caso de que el disquete no tenga la informaci n requerida o presente alg n tipo de defecto se asignar una nota de cero (0) a la revisi n de la corrida. Un informe seg n la estructura sugerida anteriormente. El listado del programa debidamente documentado. Los sobres se deben entregar puntualmente, en el laboratorio, a la hora de entrada. No se recibir n proyectos despu s de hora.

Vous aimerez peut-être aussi