PRÁCTICA D3 EL JUEGO DE LA VIDA ------------------------------- ALUMNOS: Carlos Valdearcos Ayala Lorena Gil Nuñez GRUPO: G12 PAREJA: 07 EXPLICACIÓN DE LA PRÁCTICA -------------------------- Comienza el programa,llamado juego_de_la_vida,definiendo la constante maxlad que indica el número maximo de filas y columnas de la matriz cuadrada,en nuestro caso 20.Después en la cláusula type definimos un tipo de variable bin,que nos mostrará el estado de cada una de las celdas,tomando 1 como activas y 0 como muertas.En la misma cláusula definimos el tablero como un registro compuesto por dos campos.El primer campo llamado lado,es un dato de tipo integer.El segundo,llamado matriz,es un vector de dos dimensiones,es una matriz cuadrada de lados desde 1 hasta maxlad de tipo binario.Es decir,una matriz cuadrada de ceros y unos. El programa continúa con un procedimiento llamado menu que dibujará por pantalla los diferentes casos del menu. Como el procedimiento que se nos proporciona no cargaba el contenido correcto del fichero de texto,hemos creado un procedimiento por el cual nos carga el fichero con su contenido En el siguiente procedimiento (llamado mostrar),con un parámetro de entrada y salida de tipo tablero,dibujaremos el tablero por pantalla,recorriendo con un for anidado todas las celdas de la matriz y escribiendo cada una de ellas. A continuación,en el procedimiento generar(con parámetro de entada y salida de tipo tablero),declaramos una variable de tipo real llamada probabilidad,en la que pediremos al usuario la probabilidad que posteriormente compararemos con la producida aleatoriamente. Declaramos también i,j de tipo integer que utilizaremos para recorrer la matriz. Comienza el cuerpo del procedimiento pidiendo al usuario el tamaño del tablero, guardando en el campo lado el obtenido.Después se pide al usuario la probalidad a comparar. Luego se inicializa el vector guardando el valor 0 en todas las celdas de la matriz(Se recorre el vector desde 1 hasta el lado que anteriormente se había pedido,por filas y columnas). Despues,para las filas y las columnas que no son marco del tablero(primera y última fila y primera y última columna,esto se consigue empezando a recorrer el vector a partir de la segunda fila hasta una fila menos que el lado obtenido.Idem para las columnas),se compara la probabilidad pedida al usuario con la obtenida aleatoriamente con la función random.Si la probabilidad obtenida aleatoriamente es menor que la dada por el usuario,la celda estará muerta (0);en caso contrario,es decir si la probabilidad obtenida aleatoriamente es mayor o igual a la fijada por el usuario, la celda estará viva (1).Finalmente,se muestra el tablero,llamando al procedimiento mostrar. En la siguiente función (num_vecinas),con parametro de entrada salida de tipo tablero y dos parámetros de entrada de tipo entero,se devuelve un entero,en el que guardaremos el número de vecinas vivas (1).Declaramos dos variables de tipo entero i,j para recorrer la submatriz y otra variable,también de tipo entero,en el que contaremos las vecinas vivas. Inicializamos el contador a cero.Posteriormente,recorremos la submatriz vecina de cada celda.Para esto,sumamos y restamos una unidad a cada uno de los subindices de la matriz tablero, por filas y por columnas,de modo que queda la submatriz de tres por tres a la que hay que quitarle la celda centro que es la que posee los subindices iguales a los de la matriz.La función devuelve un entero que guarda el numero de celdas vecinas vivas. El programa continua con el procedimiento sigGeneración.En dicho procedimiento se declaran dos parametros de entrada/salida de tipo tablero y otros tres de entrada de tipo integer,para las reglas del juego.Declaramos dos variables de tipo integer i,j para recorrer la matriz.Copiamos el valor del lado del tablero inicial,para que la matriz final sea de las mismas dimensiones que la inicial.Inicializamos la matriz a ceros y evitando la primera y última fila,y la primera y última columna (marco) recorremos la matriz inicial buscando celulas muertas o vivas.En caso de que sea muerta(0) y el numero de vecinas sea igual a la regla x,la celula final estará viva.Para ello llamamos a la función num_vecinas introduciendo como parámetros t (tablero inicial) y los subindices de la fila y la columna.En caso que la celula este viva (1) y se encuentre dentro del intervalo y<=numero de vecinas<=z la célula estará viva en el siguiente tablero. A continuación,en el procedimiento ejecución,con parametro de entrada/salida t:tipo tablero declaramos las variables x,y,z,turnos,c y modo de tipo integer así como la variable tfinal de tipo tablero.Asignamos,por defecto,las reglas X,Y,Z a los valores preestablecidos.Posteriormente pedimos al usuario que introduzca el número de turnos.así como si dsea cambiar las reglas.En dicho caso se le pediran al usuario las nuevas reglas.También se le pregunta al usuario si desea la ejecucion paso por paso o solo resultado.Se muestra el tablero principal y se entra en el bucle while si turnos es >0,se llama ala funcion sigGeneracion dando como parametros las reglas y el tablero inicial y final. Si el modo elgido ha sido paso por paso,se muestra el tablero final.Se asigna al tablero principal el tablero final y se disminuye un turno.Si el modo elegido ha sido sólo resultado,se muestra el tablero final. El programa principal es un menu conformado con un case que se repite hasta que la opción elegida sea salir. ---------------------------- (añadido tras someter) ---------------------------- 21:04:25 11/12/09 -> Segun los datos introducidos los ficheros son: G12P07D2 -> Los autores del trabajo son: Gil Nuñez, Lorena Valdearcos Ayala, Carlos Nombres originales de los archivos entregados -> JUEGOVID.PAS, D3.txt