miércoles, 8 de abril de 2009

Movimiento - Reglas y Excepciones

El movimiento es el corazón del Proyecto y de él depende todo el desarrollo evolutivo. Obviamente, si no hay movimiento, el Blable no se podrá alimentar (y lo mismo para los iTERs) Tampoco existiría la reproducción salvo que, tanto macho como hembra apareciesen en posiciones lindantes. La Visión dejaría de tener sentido ya que ¿de qué serviría “saber” que tienes comida, un depredador o un congénere cerca si no puedes moverte para comer, escapar o reproducirte?

Hasta ahora hemos comentado la base matemática que define el movimiento mediante la matriz del dibujo de al lado. Además, hice en su momento la explicación de las fórmulas y cómo se deberían tratar las excepciones. En esta entrada, pasaré a explicar en profundidad cómo se tratan informáticamente/matemáticamente dichas excepciones. Para empezar, deberemos definir qué es una excepción y dónde las encontraremos.


Mondo Lirondo es una matriz, una cuadrícula de celdas que definen posiciones. Esta matriz no puede ser excedida y marca los límites del movimiento de los personajes; nada puede salir y nada puede entrar. Definamos antes un entorno con las siguientes variables:


Ancho: 7 celdas
Alto: 7 celdas
Total: 49 celdas (7x7)

Estos valores son, naturalmente, un ejemplo ya que la intención es que Mondo Lirondo tenga una extensión de aproximadamente 100x100 = 10000 (la primera versión Beta es de 50x44 = 2200) Teniendo en cuenta este ejemplo, ¿dónde estarían las excepciones a las fórmulas matemáticas del movimiento?

Excepción 1 - Lado izquierdo de Lirondo: casillas marcadas en azul. No fue difícil encontrar una fórmula que pudiese identificar y tratar dicha excepción: siempre que el resto de la división sea “cero”.

x = resto de (posición - 1) / ancho

Supongamos que la posición del Blable es 8. El resultado sería el siguiente:

x = resto de (posición - 1) / ancho
x = resto de 7 / 7
x = 0

Pongamos otro ejemplo con la casilla por ejemplo número 29:

x = resto de (posición - 1) / ancho
x = resto de 28 / 7
x = 0

Excepción 2 - Lado derecho de Lirondo: casillas marcadas en verde. Deducción lógica, ¿verdad? Mismo caso que el anterior pero sin restar 1 a la posición.

Supongamos que la posición del Blable es 35. El resultado sería el siguiente:

x = resto de posición / ancho
x = resto de 35 / 7
x = 0

Excepción 3 - Lado superior de Lirondo: casillas marcadas en gris. Poco misterio aquí también, ni siquiera hace falta una operadores matemáticos; en este caso será necesario utilizar operadores lógicos:

Supongamos que la posición del Blable es 4. Siempre que “x” cumpla esta condición determinaremos que estamos en dicha excepción del movimiento:

1 < x > ancho
1 < 4 > 7 --> verdadero

Excepción 4 – Lado inferior de Lirondo: casillas marcadas en amarillo. Aplicaremos el mismo proceso de operadores lógicos. Supongamos que la posición del Blable es 45. Siempre que “x” cumpla esta condición determinaremos que estamos en dicha excepción del movimiento:

((ancho x alto)-ancho) < x > (ancho x alto)
((7 x 7) – 7) < 45 > (7 x 7)
43 < 45 > 49 --> verdadero


Excepción 5 – Esquinas marcadas en negro. Al igual que las anteriores, la única forma es usando operadores lógicos de una forma muy sencilla.

x = 1 --> verdadero si el Blable está en la posición 1 (más simple imposible, ¿verdad?)
x = ancho --> verdadero si el Blable está en la posición 7
x = ((ancho x alto) – ancho) --> verdadero si el Blable está en la posición 43
x = (ancho x alto) --> verdadero si el Blable está en la posición 49

Aunque siempre hago referencia a Blables, todo lo referido anteriormente es perfectamente válido y aplicable a cualquier especie que tenga la capacidad de movimiento dentro de Lirondo como es lógico. Otra cosa son sus condicionantes para realizar el movimiento ya que un iTER tendrá muy poco interés en el Aloe Vera mientras que un Blable se pirrará por ellas.

Hasta aquí la explicación de cómo el resto de las divisiones me han ayudado a solucionar el movimiento de las especies dentro de mi cuadriculado mundo. ¿Alguien pensó que el resto de la división tendría alguna utilidad?

No hay comentarios:

Publicar un comentario