PRÁCTICA DE DISEÑO 2 JUEGO DE LA VIDA Amaya Castellano Martínez (NIA:566772) Francisco Jiménez Humánez (NIA:542018) EXPLICACIÓN DE LA PRÁCTICA La práctica consiste en el desarrollo del juego de la vida, en el que introduciendo ciertos valores que se le piden al usuario, la máquina desarrolla el juego directamente. En primer lugar, se le muestra el menú de opciones al usuario, siendo el siguiente: 1:Genera mundo aleatorio. 2:Ejecución 3:Estado inicial. 4:Salir. Una vez mostrado el menú se le pide al usuario que elija una de las opciones mostradas en el menú. Dependiendo de la opción elegida se realizará la acción correspondiente a la opción elegida. Si el usuario elige la opción 1, se le pide que introduzca el número de casillas que desea que tenga el tablero, siempre siendo un tablero cuadrado. Una vez introducido este valor se le pide al usuario que introduzca una probabilidad entre 0 y 1, y a continuación se pone el tablero a cero y se llama a los procedimientos que van a generar y dibujar el tablero. Si el usuario elige la opción 2, en primer lugar se le pide al usuario que introduzca las condiciones para que las células vivan o mueran. Primero se pide el número de células que quiere que haya alrededor de una célula muerta para que viva, y después se le pide el intervalo de células vivas que debe de haber alrededor de una célula viva para que se mantenga viva. Una vez pedido esto se le pide que introduzca el número de turnos que desea jugar. Y por último, que introduzca el método mediante el cual quiere jugar, introduciendo una "P" si desea jugar paso a paso, en el que se muestran uno a uno los nuevos tableros generados, o introduciendo una "S" si desea solo el resultado final en el que se muestra solamente el último tablero generado. Si el usuario introduce la opción 3, se carga un estado ya dado mediante un fichero y un documento txt llamado estadoinicial, con lo cual el usuario podrá jugar con este tablero en vez de generarse uno aleatorio. Si el usuario elige la opción 4, el juego habrá finalizado. DESCRIPCIÓN DE LOS TIPOS DE DATOS ELEGIDOS Para realizar esta práctica, se utilizan 4 módulos, de los cuales 1 es función y los otros 3 son procedimientos. La diferencia en la utilización de un módulo u otro es que las funciones te devuelven un valor de un tipo definido por el programador, en cambio los procedimientos te pueden devolver varios valores o ninguno. Para que esto suceda tenemos que nombrar tanto los procedimientos como las funciones con un nombre determinado y pasarle unas variables para que dentro de dicho módulo se ejecute el cuerpo de instrucciones. Dentro de cada procedimiento y función, asi como del programa principal, hemos elegido unos tipos determinados de variables: - Entero (INTEGER): se ha utilizado para variables referidas a los contadores, los valores de las condiciones para que siga viva o muera, para la opción del menú a elegir, el número de turnos. - Caracter (CHAR): se ha utilizado para que se escriba en el tablero si la célula está viva '1' ó si está muerta '0', y para elegir el método de ejecución del programa 'P' o 'p' para el método paso a paso y 'S'o 's', para el método sólo resultado. - Booleano (BOOLEAN): se ha utilizado para que el programa sepa si la célula está viva (true) o está muerta(false). - STRING: se ha usado para declarar las cadenas de caracteres del fichero cargar mundo. ESTRUCTURA GENERAL DEL PROGRAMA Este programa se divide en: - tipos - 1 Función. - 3 Procedimientos. - Progama principal. a) TIPOS: Se define el tablero como un vector de 20 por 20 que es lo máximo que puede ser y de tipo booleano. b) FUNCIÓN: · Función "cargar_mundo": esta función genera el tablero que se nos da en el documento txt estado incial para posteriormente usarlo en el procedimiento de ejecución. Se define como variable por valor el nombre del fichero ya que lo tienen que dar previamente, y además no va a ser modificado. c) PROCEDIMIENTOS: · Procedimiento "GeneraTablero": En este procedimiento se genera un tablero aleatorio mediante un random, y también nos comprueba si el aleatorio es menor a la probabilidad que ha introducido el usuario, entonces la célula estará viva y si no estará muerta. Para ello, se recorre el tablero mediante dos FOR, uno para que recorra las filas y otro las columnas del tablero. Se le pasa como parámetro por referencia el tamaño, el aleatorio y el tablero ya que al inicio entran con un valor y sale con otro. Y por valor se le pasa la probabilidad ya que se tiene que saber su valor para utilizarlo pero no cambia al salir del procedimiento. · Procedimiento "DibujaTablero": Este procedimiento sirve para dibujar el tablero con las células muertas o vivas, para ello se utiliza también dos FOR para recorrer el tablero y seguido se usa la condición IF para dibujar un '1' en las células que estén vivas y un '0' en las células que estén muertas. Se le pasa por valor el tamaño del tablero ya que no cambia durante todo el procedimiento y por referencia el tablero. · Procedimiento "Ejecución": En este procedimiento se ejecuta el juego mediante varios FOR para recorrer el tablero y ver las células que tiene vivas alrededor la célula que estamos analizando para cambiarla a muerta o mantenerla dependiendo de las condiciones puestas mediante la condición IF para las siguientes condiciones: - Si la célula está muerta y el número de células vivas de alrededor coincide con el número que ha inroducido el usuario entonces la célula vive. - Si la célula está viva y el número de células vivas está entre el intervalo que introduce el usuario, entonces la célula se mantiene viva. Se le pasa por valores de x,y y z ya que no van a cambiar y por referencia el tablero anterior generado y el que se va a generar durante el procedimiento, el tamaño del tablero y las vecinas ya que van a ir cambiando. Los tableros se pasan por referencia porque ha sido definido como un vector y los vectores se pasan por referencia. d) PROGRAMA PRINCIPAL En el programa principal, escribimos en orden la ejecución del juego de la vida, llamando en los momentos necesarios a los módulos que se necesiten. El programa principal es un bucle, realizado con un REPEAT, hasta que el usuario elija la opción 4 que es la de salir. Se comienza preguntando al usuario como quiere que sea el tablero, siempre siendo cuadrado, una vez leído, se le muestra el menú con las distintas opciones a elegir mediante un CASE: 1:Sirve para generar un tablero aleatorio mediante un random. En este apartado se genera un tablero para poder jugar con el en el apartado dos de ejecución. 2:En esta opción se ejecuta el juego con un tablero o bien con el elegido aleatoriamente en la opción 1 o el elegido en la opción 3 siendo este tablero ya dado por un txt. Para elegir el método de juego que queremos utilizar se usa un CASE, para que en caso de que se elija el método paso a paso se ejecute el bucle del REPEAT, ejecute y dibuje el juego llamando a los procedimientos correspondientes. 3:En este apartado llamamos mediante ficheros a un tablero ya seleccionado mediante un txt llamado estado inicial, con el cual se podra ejecutar el juego mediante la opción 2. 4:Este apartado sirve para salir del juego. Para ello se usa el UNTIL del REPEAT del bucle, para que se repita el bucle hasta que se elija esta opción. Si el usuario introduce una opción que no es ninguna de las mostradas, el programa le informará de que la opción es incorrecta y si el usuario introduce la opción 4 el juego habrá terminado. Estas opciones estan descritas mediante la condición IF. ---------------------------- (añadido tras someter) ---------------------------- 13:47:32 11/12/09 -> Segun los datos introducidos los ficheros son: G10P04D2 -> Los autores del trabajo son: CASTELLANO MARTÍNEZ, AMAYA JIMÉNEZ HUMÁNEZ, FRANCISCO Nombres originales de los archivos entregados -> VIDA.PAS, vida texto.txt