EL JUEGO DE LA VIDA El programa que va a ser descrito a continuación se basa en el juego de la vida; donde es un juego en el que a partir de unas reglas se crea o se destruye vida; no es un simple juego sino que en ocasiones se ha llegado a tratar como una filosofía, la llamada inteligencia virtual. A continuación se describirá y explicara la composición del juego de la vida: El programa ha sido inicializado como todos los programas en Pascal, con la palabra reservada `program´; a continuación se ha puesto otra palabra reservada `uses ´ que permite la utilización de librerías (delay, clear scream, textcolor, gotoxy,…), Posteriormente se han definido las constantes, tipos, los vectores (t_vcelula), los registros (t_rvida donde contienes variables y vectores) y variables, todo ello en este orden. Una vez mencionado esto voy a explicar el programa principal con sus distintas funciones y procedimientos. Se empieza con un procedimiento llamado iniciar_valores_defecto cuya variable de entrada y salida i_v_d_vida de tipo t_rvida que se corresponde el llamamiento con la variable vida; su función es inicializar los valores de las reglas de nacimiento, vida, muerte y los turnos. A continuación utiliza el procedimiento dibujar_presentacion_juego no tiene variables de entrada ni de salida y su utilidad es hacer una presentación del juego; utilizamos el readkey en la variable tecla para que la pantalla se borre al pulsar cualquier tecla. La variable tecla la inicializamos a 0. Posteriormente hacemos un bucle en el cual no se sale hasta que la tecla s sea pulsada y el programa se finalice (while). Dentro de este, está contenido el resto de instrucciones que se paso a explicar. Existe un repeat-until que trata de tener un carácter cuyos valores sean 1, 2, 3 o S, correspondientes a los valores solicitados en pantalla por el procedimiento dibujar_menu, para analizar estos valores tenemos un case of, en el cual el valor 1 ira al procedimiento reglas_juego, el valor 2 ira al procedimiento leer_turnos, y el valor 3 continuara con la carga y ejecución de la vida. El procedimiento reglas_juego tiene como variable de entrada y salida r_j_vida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento determina los valores nacimiento, vida o muerte. El procedimiento leer_turnos tiene como variable de entrada y salida l_t_vida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento determina el número de turnos a ejecutar. Continuando con la ejecución de la vida del valor 3 ya comentado existe un repeat-until que trata de tener un carácter cuyos valores sean 1, 2, 3 o S correspondientes a los valores solicitados en pantalla por el procedimiento dibujar_menu_generar_mundo; para analizar estos valores tenemos un case of , en el cual el valor 1 ira a los procedimientos referentes a cargar un mundo aleatorio, el valor 2 ira a los procedimientos referentes a cargar un mundo a partir de un fichero, y el valor 3 no cargara ningún mundo con lo que se consigue que continué desde el resultado del proceso anterior. Para la carga de un mundo aleatorio en primer lugar hay que ir al procedimiento limite_casillas con la variable de entrada y de salida limvida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento determina el valor del lado del cuadrado de la vida. Seguidamente el procedimiento mundo_aleatorio tiene como variable de entrada y salida vida_m_a de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento se encarga de generar un mundo aleatorio además de tomar del usuario la probabilidad de que las casillas estén vivas al comienzo. Dentro de este mismo procedimiento es utilizado el procedimiento borrado_limites que tiene como variable de entrada y salida b_l_vida de tipo t_rvida que corresponde con vida_m_a en el programa mundo aleatorio; este procedimiento consiste en colocar como no usadas las casillas que están fuera del recuadro de trabajo. Para finalizar con la carga del mundo aleatorio vamos al procedimiento cargar_inicio tiene como variable de entrada y salida cargar_vida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento una vez que tenemos el vector de inicio lo cargamos en el vector actual para que comience el procesado del juego de la vida. En el valor 2, para cargar un mundo a partir de un fichero se dispone un repeat-until que trata de tener un carácter cuyos valores sean 1, 2 o S, correspondientes a los valores solicitados en pantalla por el procedimiento dibuja_menu_cargar_mundo. Para analizar estos valores tenemos un case of, en el cual el valor 1 determina el nombre del fichero a cargar en el valor predeterminado estado.txt y realiza las operaciones de lectura y carga del fichero, el valor 2 en primer lugar obtendrá el nombre del archivo e igualmente realizara las operaciones de lectura y carga del fichero. Para la lectura del fichero se ejecuta la función tomar_nombre_archivo que devuelve un string con el nombre del archivo txt introducido por el usuario. Una vez que conocemos el nombre del fichero a cargar bien sea el predeterminado o el dado del usuario, el procedimiento mundo_desde_fichero que tiene como variables de entrada y salida fichero_vida de tipo t_rvida que corresponde con vida en el programa principal y m_d_f_archivo de tipo string se corresponde con nombre_archivo, es el encargado en pasar los datos del fichero al vector de inicio de celda. A continuación se ejecuta el procedimiento cargar_inicio ya explicado anteriormente. Una vez que sea determinado la forma de generar el mundo cerramos el case of y entramos dentro del condicional (if) que confirma que tecla sea igual a 1 y 2, es decir, que no sea igual a ‘s’ de salir. Ahora se realiza la ejecución propiamente dicha Existe un repeat-until que trata de tener un carácter cuyos valores sean 1, 2 o S, correspondientes a los valores solicitados en pantalla por el procedimiento dibujar_menu_paso_o_final. Para analizar estos valores tenemos un case of, en el cual el valor 1 dibujara todos los pasos para cada uno de los turnos, el valor 2 dibujara el principio y el fin. En ambos casos se ejecuta el procedimiento dibujar_vida_actual tiene como variable de entrada dibujar_vida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento dibuja los valores contenidos en el vector actual del registro vida. Nuevamente se lee mediante un readkey el valor tecla para cambiar pantalla y en caso de que la tecla sea ‘s’ saldrá del programa. Se mete en un bucle (while) en el cual no sale hasta que turno sea igual a 0 o en el caso de la ejecución paso a paso la tecla leída sea ‘s’. Se ejecuta el procedimiento avance_vida tiene como variable de entrada y salida adv_vida de tipo t_rvida que corresponde con vida en el programa principal; este procedimiento en primer lugar pasa los datos del vector posición actual al vector posición anterior y a continuación calcula la siguiente posición y la mete en el vector actual. Para el caso de ejecución paso a paso se vuelve a ejecutar dibujar_vida_actual y vuelve a detenerse hasta leer tecla. Descuenta 1 al valor turno, y vuelve a ejecutar el bucle. En el caso de resultado final, se vuelve a ejecutar dibujar_vida_actual y vuelve a detenerse hasta leer tecla. La ejecución del proceso termina a falta de inicializar turno a 10 y poner el valor vida.continuar a true para indicar que el proceso ya ha sido ejecutado una vez y por lo tanto en la siguiente ejecución se podrá tomar como valor inicial el estado final de la ejecución anterior. ATENCIÓN: EL NOMBRE DEL FICHERO PREDETERMINADO HA DE SER ESTADO.TXT, ADEMAS LOS NOMBRES DE LOS FICHEROS TXT NO DEBERAN DE EXCEDER 8 CARACTERES Y A CONTINUACIÓN DEBERAN LLEVAR INDICADA LA EXTENSION '.TXT'; EL FICHERO DEBERA UBICARSE EN EL MISMO DIRECTORIO QUE EL EJECUTABLE DE TURBO PASCAL. ---------------------------- (añadido tras someter) ---------------------------- 23:36:12 11/12/09 -> Segun los datos introducidos los ficheros son: G15P12D2 -> Los autores del trabajo son: Gorbe Ramiro, Jorge Nombres originales de los archivos entregados -> vidaJGR.PAS, explicacion.txt