La práctica que hemos realizado consiste en realizar un juego de la vida que debe cumplir las especificaciones requeridas. Los alumnos que han realizado está práctica han sido: Alberto Ramón Tesán, NIA 563676, NIF 76923996-J Eugenio Sierra Asión, NIA 523499, NIF 72990472-H Los alumnos pertenecen al grupo 13 y puesto 10, con profesor Javier Lacasta. Práctica 2. La práctica a realizar consistía en realizar un juego de la vida, en el que el usuario introduce por teclado una serie de valores para generar un mundo celular aleatorio. Posteriormente mediante la cantidad de turnos que el usuario requiera para la partida, se ira actualizando el mundo celular tantas veces como turnos halla elegido. Primeramente elegimos una matriz de como máximo 16 filas y 16 columnas de números enteros. A continuación voy a explicarles los diferentes procedimientos, y funciones utilizados: Procedimiento datostab. En este procedimiento tenemos dos valores de salida que son lado y p. La variable lado la introduce el usuario por teclado y tiene que ser un valor numérico entre 4 y 20, a partir de esta variable el usuario elige el número de filas y columnas que quiere para su tablero. Posteriormente se le pide que introduzca la probabilidad de que cada célula este encendida o apagada (viva o muerta) que tiene que ser un valor numérico entre 0 y 1, ya que es en tanto por uno. Procedimiento reglasjuego. Este procedimiento una vez generado el mundo celular, el usuario tiene la potestad de elegir el número de células que tiene que haber alrededor para que una célula resucite y el intervalo (valor mínimo y valor máximo) para que una célula permanezca viva. En caso contrario estos valores serán predeterminados por el programa. x (células que tiene que haber alrededor para que una célula resucite) = 3. y (valor mínimo de células que tiene que haber alrededor para que una célula siga viva) = 2. z (valor máximo de células que tiene que haber alrededor para que una célula siga viva) = 3. En este procedimiento también se pide el número de turnos que quiere el usuario que dure la partida, sin contar el tablero creado inicialmente. Este valor será introducido por teclado por el usuario y será un valor mínimo de 1. Procedimiento mundoinicial. En este procedimiento se genera el mundo celular inicial aleatoriamente. Recorremos el tablero mediane una matriz(mundo) tanto las filas, como las columnas y comparamos la probabilidad que nos ha introducido el usuario con la que nos sale mediante un random en cada célula. Si la probabilidad introducida es mayor que la obtenida la célula se enciende(valor1) y en caso contrario se apaga(valor0). La primera fila y la última y la primera columna y la última siempre tienen que estar apagadas, en todas sus células(valor 0). Una vez recorrido el tablero volvemos a recorrer la matriz para dibujar lo obtenido anteriormente. En caso de que este encendida dibujamos una E y en caso contrario una A (apagada). Finalmente asignamos a otra matriz (pos) el valor de la matriz mundo en cada casilla, ya que nos servirá para ir actualizando el tablero en el resto de procedimientos. Procedimiento ejecucion. Este es el procedimiento que una vez generado el mundo celular aleatoriamente y no antes, empiezan a aplicarse una serie de instrucciones para poder realizar dicho juego. En primer lugar el usuario tiene que elegir entre ver el tablero paso a paso o ver solo el resultado final(lo haremos mediante un if), es decir, si prefiere verlo paso a paso el usuario vera por pantalla el tablero actualizado como el número de turnos que halla introducido anteriormente. Si por el contrario prefiere solo ver los resultados se mostrara por pantalla el último mundo celular actualizado, por ejemplo, si hay 4 turnos en el modo 1 se vera 4 veces el tablero actualizandose cada vez que suma un turno y en el modo 2, solo se verá un tablero una vez finalizado los 4turnos, por lo que dibujaremos nuestro tablero fuera de los for de fila, columna y turno. Realizamos algo parecido con el procedimiento anterior, recorremos todas las filas y columnas y vamos comparando, si el número de celulas que hay vivas alrededor esta dentro del intervalo que hemos introducido por teclado anteriormente o predeterminado por el programa, la célula seguirá viva, en caso contrario morirá. Si una célula está muerta y tiene el mismo número de celulas vivas alrededor que nosotros hemos querido o que el programa ha establecido, dicha célula resucitará. La primera fila y la última y la primera columna y la última siempre tienen que estar apagadas y por eso tras evaluar las condiciones las asignaremos como apagadas, en todas sus células. Una vez recorrido el tablero lo volvemos a recorrer para dibujar lo obtenido anteriormente. También asignaremos a la matriz pos la matriz recorrida mundo que contiene el valor actual de la matriz para que al subir de nuevo al bucle nos la actualice y haga las condiciones con la nueva variable de la matriz. En caso de que este encendida dibujamos una E y en caso contrario una A (apagada). Funcion cargar_mundo: Viene dada por el ordenador. Procedimiento option. En dicho procedimiento se muestra el menu por pantalla para que el usuario según la opción que elija, realice una operacion u otra pasandole la variable tecla al programa principal. {Procedimiento leestring. Este procedimiento lo hemos dejado entre llaves porque no nos funcionaba correctamente del todo, y esperamos mejorarla para la segunda entrega, pero básicamente necesitamos que le pase el fichero de cargar_mundo y nos devolverar un string que representará un tablero y separada las filas entre sí por el caracter '|', primero hemos leído el string hasta que encontremos el simbolo | para saber el número de columnas y filas del mundo celular ya que se trata de una matriz cuadrada(lo hemos realizado con un repeat). Luego leemos los números de la primera fila, y en otro for leeemos el resto de filas actualizando y variando los índices para omitir las barras'|' y guardando los nuevos valores sin barras en otro string. Posteriormente pasamos el string con los números sin barras a un vector de la misma dimensión, y este posteriormente a una matriz que pueda ser pasada al procedimiento ejecutar y evalué en él las condiciones específicas y nos actualice la matriz y dibuje el tablero.} Programa principal. Esta parte es la mas corta y sencilla de todas, ya que lo unico que realizamos es que dependiendo de la tecla que pulse realizara una operacion u otra, con la condición de que no puede darle a la opcion ejecutar si antes no tiene creado un mundo, bien por generar mundo aleatorio o por cargar un estado inicial. Fin. Gracias y Saludos. Alberto Ramón Tesán Eugenio Sierra Asión ---------------------------- (añadido tras someter) ---------------------------- 21:12:48 11/12/09 -> Segun los datos introducidos los ficheros son: G13P10D2 -> Los autores del trabajo son: Ramón Tesán, Alberto Sierra Asión, Eugenio Nombres originales de los archivos entregados -> diseño2.PAS, diseño2.txt