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.
- Puertes: 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
|
|