Formas de obtener el código identificador de un proceso

Todos los procesos tienen su propio código identificador en ID (palabra reservada en el lenguaje que equivale al código identificador del proceso).

Cuando se crea un proceso (se llama), éste devuelve como valor de retorno su propio código identificador, a no ser que haya terminado con un RETURN(<expresión>). Es decir, un proceso devolverá su código identificador siempre que termine (llegue su END), ejecute la sentencia FRAME o la sentencia RETURN sin expresión entre paréntesis.

En el siguiente ejemplo, desde el programa principal se crea un proceso (de tipo mi_proceso) y se guarda su identificador en la variable id2.

Ejemplo:
PROGRAM mi_juego;
PRIVATE id2;
BEGIN
    id2=mi_proceso();
    // ...
END
PROCESS mi_proceso()
BEGIN
    // ...
END


Todos los procesos tienen predefinidas las siguientes variables locales con indentificadores de otros procesos:

father - padre, identificador del proceso que lo creó (el que hizo la llamada).

son - hijo, identificador del último proceso creado por éste (último proceso al que se ha llamado).

bigbro - Hermano mayor, identificador del último proceso que creó el padre antes de crear éste.

smallbro - Hermano menor, identificador del siguiente proceso que creó el padre tras crear éste.

Estas variables pueden valer 0 si no han sido definidas (por ejemplo son valdrá 0 hasta que no se cree un proceso, o si éste ya ha desaparecido).

Los códigos identificadores de los procesos permiten acceder a las variables locales del mismo (<identificador>.<variable>), y como father, son, etc., son, a su vez, variables locales se pueden realizar combinaciones como son.bigbro para acceder al identificador del penúltimo proceso creado (ya que son es el del último, por lo que su hermano mayor será el penúltimo).

Hay otras formas de obtener códigos identificadores de procesos (además de cuando se crean y por parentesco directo), como son:

- La función get_id() para obtener los identificadores de los procesos de un tipo determinado (nave, disparo, etc.) que existen en un determinado momento del juego.

- La función collision() para obtener los identificadores de los procesos con los se está chocando (colisionando).

Cuando un proceso determinado necesita acceder desde muchos otros, por ser un proceso importante como, por ejemplo, la nave protagonista de un juego, entonces puede ser más útil asignar su identificador a una variable GLOBAL del programa (que puede ser accedida por cualquier proceso en cualquier punto). De esta forma cualquier proceso podrá interactuar con él, ya que tendrá su identificador.

Ejemplo:
PROGRAM mi_juego;
GLOBAL
  id_nave;
BEGIN
    id_nave=nave();
    // ...
END
PROCESS nave()
BEGIN
    // ...
END
PROCESS enemigo()
BEGIN
    // ...
    id_nave.z=0;
    // ...
END


En este ejemplo los procesos de tipo enemigo acceden en un determinado punto a la variable z de la nave que creó el programa principal, utilizando para ello su identificador que está en la variable global id_nave.


Ver: Códigos identificadores de procesos