>> PRGs >> Cómo encontrar la mínima distancia entre procesos by TiRSO.

Es la primera vez que escribo algo para enseñar a los demás así que espero que disculpéis las malas explicaciones xD. De todas formas si tenéis alguna duda, podéis contactar conmigo en TiRSO_00@hotmail.com o en el propio foro de www.darkastleestudios.tk.

Desde el primer momento en que empezamos a pensar en el RAF 2, nos dimos cuenta de que una de las dificultades con las que nos encontraríamos sería hacer que cada escuadrón decidiera a cuál de todos los enemigos debía atacar. Decidimos que lo mejor sería que atacasen al escuadrón más cercano. Entonces me puse a pensar una buena forma de conseguir ese cálculo, y después de reflexionar bajo un árbol, me surgió esta idea que me parece bastante interesante. Así es como he hecho yo que un proceso detecte al más cercano de todos sus enemigos:

Bien, lo único que necesitaremos será una variable que llamaremos objetivo en la que almacenaremos la ID del proceso más cercano, una variable auxiliar (en el ejemplo se llamará aux), un dato que llamaremos distanciamenor que almacenará la menor distancia y otro dato auxiliar que llamaremos distanciaaux. Por otra parte necesitaremos una tabla en la que estén almacenadas las IDs de todos los procesos a comprobar a la que llamaremos escsid[nº de avión].

El código es así de simple:

For(aux=0; aux<11; aux+=1);
.....distanciaaux=get_dist(escsid[aux]);
.....If(distanciaaux0);
..........distanciamenor=distanciaaux;
..........objetivo=escsid[aux]; //Objetivo será la ID del escuadrón más cercano.
.....End
End

Vale, ahora os lo explico xD:

La primera sentencia es una FOR que ejecutará el código en su interior desde aux=0 hasta aux< x. Debéis sustituir x por el número de elementos máximo en la tabla de las IDs para que compruebe todas las IDs almacenadas en la tabla.

El código que ejecuta es bastante sencillo:

1º) Establece el dato distanciaaux como la distancia al proceso que toca comprobar.

2º) A continuación comprueba si esa distancia es menor que distanciamenor (dato que habremos igualado previamente a una cantidad mayor a la distancia máxima, por ejemplo 99999999 xD). También comprueba en esta sentencia que la distanciaaux sea mayor que "0" evitando así el caso de que el proceso comprobado no exista.

3º) En caso de que eso se cumpla, actualiza el dato distanciamenor como el de mínima distancia e iguala la ID del proceso comprobado en ese momento al dato preparado para ello: objetivo.

Ese proceso se repite tantas veces como sea necesario dejando siempre el dato objetivo como la ID del proceso más cercano al que lo comprueba. Estoy seguro de que esta no es la mejor forma de hacer esto, pero también es claro que no es la peor, es más, yo creo que es una forma bastante compacta y rápida para conseguir un buen resultado. Por supuesto podéis modificarlo (de hecho seguro lo tendréis que hacer) para adaptarlo a vuestras necesidades, pero la idea es esa.

Para cualquier cosa podéis contactar conmigo en TiRSO_00@hotmail.com o en www.darkastleestudios.tk