PRACTICA: Diseño 2 NOMBRE: Juego de la vida ALUMNOS: Javier Esteban Finol 574938 y Gonzalo Ibarz Garces 563264 FECHA: 10/12/2009 COMENTARIO Para hacer el panel y las interacciones hemos creado un vector que limita el tablero a 20 casillas. A continuación definiremos cada función y procedimiento por separado siguiendo el orden del código. Procedimiento datos: Este procedimiento nos da la bienvenida al juego de la vida. Su función es que el usuario determine el número de cuadros que tendrá el tablero. Tras dar la bienvenida nos informara de que se debe introducir el tamaño del cuadro atendiendo a las limitaciones. Por consiguiente, tiene implementado el control de errores y guardara el tamaño del tablero definido por el usuario en una variable de entrada y salida que será utilizada a lo largo del programa para realizar todas las interacciones dependiendo del tamaño del tablero. Procedimiento proba: La función de este procedimiento es calcular la probabilidad con la cual una casilla aparecerá viva a la hora de generar el primer panel. La probabilidad solo puede ser de 0 hasta 100 por lo que tiene implementado el control de errores correspondiente. Esta probabilidad se guardara en una variable de entrada y de salida y será utilizada mas adelante en el procedimiento que genera el primer panel. Procedimiento mostrar celda: La función de este procedimiento es dibujar el panel teniendo en cuenta que cada casilla tiene dos estados, viva o muerta. Gracias a la variable de entrada “valor” se diferencian los dos estados. Si es 1, la casilla estará viva y si es distinto de uno, la casilla estará muerta. Procedimiento aleatorio: Este procedimiento genera el panel principal con la condición de que los bordes del panel deben permanecer muertos. Cuando dicha condición no se cumple, es decir, cuando el valor a rellenar no este en el borde, el procedimiento usa la variable prob, que es una variable de entrada, la cual guarda el valor de la probabilidad que tiene una casilla de estar viva dada anteriormente por el usuario. Para hacer esto se genera un valor aleatorio entero mediante el trunc de 0 a 100 y se compara con el valor de prob, así, si prob es mayor, la casilla aparecerá viva y si prob es menor, aparecerá muerta. Procedimiento muestra panel: Su función: Mostrar el panel. Siempre que se necesite mostrar el panel, se llamara a este procedimiento. En este procedimiento hay una variable de entrada y una variable de entrada salida. A partir de los valores de c e i que funcionan como fila y columna se hace un "for" para c y otro para i desde 0 hasta el valor de fila máximo -1 dado anteriormente por el usuario. Por ultimo se muestra el panel con los valores de c e i y mediante una condición se saltara a la siguiente línea cuando en la primera fila estén determinadas todos los valores hasta el valor máximo que definió el usuario. Procedimiento opcion1: panel generado aleatoriamente a partir de las indicaciones de probabilidad del usuario este procedure utiliza 2 variables de entrada: prob y max definidas antes y una de entrada y salida . Panel1 al ser la opcion1 generamos un panel y después este ira muestrapanel donde lo complementa. Procedimiento opcion2: Uno de los procedimientos principales del juego, su función es hacer la interacción de las células entre ellas mediante los parámetros dados por el usuario o los predeterminados. En la estructura se han implementado una función y otro procedimiento. Se usa una variable de entrada "max" y otra variable de entrada y salida "origen". Función vivamuerta: tiene como objetivo hacer la interacción entre las células. Primero y mediante una condicion se obliga a que todas las células del borde estén muertas. Mediante la utilización de un contador inicializado en 0 y el uso de condiciones que comparan las células adyacentes mediante el siguiente proceso: Se condiciona que la célula a operar no este en el borde, si no esta en el borde, se observa el estado de cada una de las células vecinas mediante la suma y/o resta de filas y columnas desde el punto de origen de la forma 123 Por lo tanto, tomando el valor origen en X, para observar el estado de la célula 1, se deberá restar a la posición origen una fila y una columna, para acceder a la posición 6 se deberá sumar una fila, para la 7 se deberá sumar una fila y una columna... así para cada posición vecina. Cada vez que se observa una posición y se cumple que dicha célula esta viva, se suma una unidad al contador, así, por ultimo se compara el valor del contador con el valor de X, Y, Z. Y dependiendo del resultado la célula morirá o vivirá (Una célula viva con entre Y y Z células vecinas vivas sigue viva (encendida), en otro caso muere (se apaga) o permanece muerta (por "soledad" o " superpoblación". Una célula muerta (apagada) con exactamente X células vecinas vivas "nace" (al turno siguiente estará viva/encendida). Procedimiento CalculaSiguientePanel: En el procedimiento calaculasiguientepanel tomamos la variable de entrada salida "origen". Vamos leyendo cada una de las posiciones del panel origen y calculamos el estado de cada célula igualando la variable de dentro del procedimiento calculasiguientepanel. Y finalmente a la variable origen le damos el valor de calculado. En el cuerpo principal del procediemto opcion2 pedimos las interacciones, es decir, el numero de veces que quiere el usuario que se muestre el mundo. También pedimos si desea que los valores ya predeterminados se carguen o no mediante un repeat until hasta que la respuesta es la correcta. En el caso en el que su respuesta sea no le pedimos todos los valores necesarios. Después pedimos al usuario el modo de ejecución, si quiere que sea vea cada cambio en el mundo o si por el contrario desea que solo se vea el mundo final. Tras esto mostraremos al usuario los valores que ha dado y los mundos que haya elegido. Siempre se mostrará el mundo inicial mediante el llamamiento al procedimiento muestrapanel que tendrá como variables el panel de origen, tras esto se mostrara todos los siguientes mundos (elegidos) mediante el llamamiento al procedimiento siguientepanel(ya explicado, y dentro de este procedimiento) el cual va a mostrarpanel. Finalmente cuando llegamos a la ultima iteración nos escribe el ultimo panel y nos llevara cuando el usuario presiona enter al menú inicial. Procedimiento menú: Este procedimiento es prácticamente el cuerpo principal del programa en el cual hacemos llamamientos a los procedimientos iniciales "datos" y "proba", y mediante el uso de un contador inicialmente en 0 se va leyendo la opción que el usuario ha elegido en el menu inicial. La estructura es un repeat until hasta que el usuario elige la opción 4 en la cual el programa se finaliza. Cuerpo principal del programa: tan solo hacemos un llamamiento al procedimiento menú con sus variables. ---------------------------- (añadido tras someter) ---------------------------- 21:54:13 11/12/09 -> Segun los datos introducidos los ficheros son: G04P02D2 -> Los autores del trabajo son: ESTEBAN FINOL, JAVIER IBARZ GARCES, GONZALO Nombres originales de los archivos entregados -> javier_gonzalo.pas, practica2.txt