EL JUEGO DE LA VIDA
Por Fernando López Ostenero
El mundo de las simulaciones es uno de los más apasionantes de la informática. Desde simuladores de vuelo hasta submarinos, pasando por los de ciudades y planetas, han desfilado por las pantallas de nuestros ordenadores. |
Imagen del programa AmosLife en plena ejecución. En ella podemos observar que las células tienden a adoptar formas geométricas bien definidas y que las que más predominan son las células rojas (barras de información en la parte inferior). |
Desde luego realizar uno de estos programas es una tarea extremadamente compleja, pero no todas las simulaciones son tan complicadas... El juego de la vida es un sencillo programa que nos permitirá adentrarnos en el maravilloso universo de imitar el mundo real en nuestro ordenador.
CRECED Y MULTIPLICAOS...
El juego de la vida consiste en una parrilla cuadriculada, en cuyas casillas podemos encontrar tres tipos diferentes de células:
- Débiles: de color azul, a las que asignaremos una fuerza vital de 1 punto.
- Medias: de color verde, con una fuerza vital de 3 puntos.
- Fuertes: de color rojo, con una fuerza vital de 3 puntos.
De una casilla en la que no viva ninguna célula diremos que se encuentra vacía y le daremos una fuerza vital de 0 puntos. Al comenzar la simulación colocaremos una serie de células en el tablero, y al seleccionar la opción de simular la vida dichas células se desarrollarán siguiendo unas reglas específicas, que a continuación explicaré:
- Si la casila está vacía analizaremos la fuerza vital de sus ocho casillas vecinas:
- Si es 4 nacerá una célula azul.
- Si es 5 nacerá una célula verde.
- Si es 6 nacerá una célula roja.
- Si en la casilla hay una célula viva y la rodea una fuerza de valor 3, dicha célula sobrevivirá esta generación. Pero si la fuerza vital que la rodea no es 3 morirá, bien de aislamiento o de asfixia.
Visto esto, es sencillo realizar un programa que, en cada generación siguiente una y otra vez. Sin embargo si colocamos sólo unas pocas células en el centro del tablero perderemos un tiempo precioso estudiando casillas muy alejadas del centro.
Para solventar este problema se pueden incluir una serie de análisis para acotar la zona del tablero a estudiar en cada generación. Dichas acotaciones se llevan a cabo en las Procedures de análisis del programa, devolviendo el rectángulo mínimo en las variables XMI, XMA, YMI e YMA.
EL BUCLE PRINCIPAL DE CONTROL
Las opciones del programa se seleccionan con el ratón mediante una serie de menús desplegables fácilmes de programas con AMOS. Estos menús se definen en el Procedure DEFINEMENUS (listado 2) con la instrucción MENU$(T,P,S).
Si hacemos MENU$(T)="NOMBRE" estaremos definiendo el título del menú de número T como NOMBRE. Al igual que en el Workbench el título del primer menú es "Workbench".
Haciendo MENU$(T,P)="OPCION" crearemos una opción en el menú número T de nombre OPCION. Y con MENU$(T,P,S))="SUBOPCION" crearemos un submenú del menú número T, opción P.
Una vez que todos nuestros menús estén definidos necesitaremos un programa que los controle y distribuya la ejecución del programa según la opción que hayamos elegido. De esta parte se encarga la rutina MAIN_LOOP (listado 1).
Observando el listado vemos que se trata de dos bucles DOLOOP animados. En el interior con la instrucción CHOICE detectaremos si se ha producido alguna elección de menú, para poder obrar en consecuencia.
Después de las instrucciones Choice(n) averiguaremos qué menú [Choice(1)], opción [Choice(2)] y subopción [Choice(3)] ha sido elegida. El resto de la rutina se encarga de las llamadas a las diversas rutinas según el menú seleccionado.
Los dos Procedures que acompañan a este artículo pueden ser usados en cualquier otro programa, sin más que cambiar los nombres de los menús y las llamadas a las rutinas.
En el disco que acompaña a esta revista podemos encontrar el listado fuente completo del juego de la vida, escrito en Amos Profesional, así como un ejecutable ya compilado. Para estudiar las características del programa aconsejo leer este artículo con el ordenador encendido y desde el editor del Amos. Para poder ver un Procedure, situaremos el cursor sobre la línea que lo define y pulsaremos F9 para abrirlo.
LISTADO 1
Procedure MAIN_LOOP
Do
Do
If Choice Then Exit
Loop
M1=Choice(1) : M2=Choice(2) : M3=Choice(3)
If M1=1 and M2=1 Then ABOUT
If M1=1 and M2=2 Then SVIDA
If M1=1 and M2=3 Then CVIDA
If M1=1 and M2=4 Then STATUS
If M1=1 and M2=5 Then MEMORIA
If M1=1 and M2=6 and M3=1 Then Exit
If M1=2 and M2=1 Then VIDA
If M1=2 and M2=2 Then PONER
If M1=2 and M2=3 Then CENTRAR
If M1=2 and M2=4 Then GEN=0 : DISPLAY
If M1=2 and M2=5 and M3=1 Then RECTANGULO[75,15,231,161,0] : VACIA : DISPLAY
Loop
End proc
|
La línea que empieza con 'If M1=2 and M2=5 and ...' acaba en la instrucción DISPLAY que se encuentra en la línea siguiente.
LISTADO 2
Procedure DEFINEMENUS
Pen 8 : Paper 0 : Rem Colores para los menús
Menu$(1)="Proyecto "
Menu$(1,1)="About "
Menu$(1,2)="Grabar "
Menu$(1,3)="Cargar "
Menu$(1,4)="Status "
Menu$(1,5)="Memoria "
Menu$(1,6)="Salir "
Menu$(1,6,1)="Confirmar"
Menu$(2)="Editar "
Menu$(2,1)="Simular la vida "
Menu$(2,2)="Colocar células "
Menu$(2,3)="Centrar células "
Menu$(2,4)="Generaciones 0 "
Menu$(2,5)="Borrar parrilla "
Menu$(2,5,1)="Confirmar"
End Proc
|
|