WIP "Evo" (estrategia en tiempo real)

Started by laghengar, November 15, 2008, 10:45:56 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Prg

#15
:) bueno, ya tengo el ejemplo. aquí está. quizá no entienda el problema... es mucho qué leer, je je je, pero el ejemplo es de varios procesos utilizando path find a la vez, pruébalo, nada pierdes.

recomendaciones.
1 si la distancia entre los puntos es mayor a 350, siempre te dará 0, ese es tu caso? , no genera camino en distancias muy grandes, yo utilizo get_distx y get_disty para acercar el camino, pero ten cuidado porque

2 si el punto de destino o el de inicio está en color blanco, se traba bennu.

3 prueba mi código, son 3 procesos a la vez, estoy seguro que te dará tips.

son todas mis recomendaciones :) este es un código distinco al de hola. :) nos vemos en 3 días, y no te desesperes, yo así estaba hace meses, la función está bien, sólo eso de las distancias me desespera, pero puedes hacer mapas a escala para que la distancia sea mayor, y sólo hay que dividir coordenadas. espero esto sí te sirva. suerte!!!

____________________________________

ahorita que recuerdo mientras preparaba el ejemplo de hola me encontré con algo parecido a lo que te sucedió. pero no recuerdo qué pasaba. creo que era algo de los bucles, o algo de la forma de llamar a path find, lo que me pasaba era que el pecesito se iba a la ezquina superior izquierda y no se movía, me tardé un poco y me tocó revisar el test de ejemplo del bennu, copié el típico bucle de while (get_...) y acomo´de algo por ahí y después de eso todo funcionó perfectamente, no recuerdo qué moví, bueno, el ejemplo que te doy está funcionando y eso es lo importante.

paht find regresa siempre primero el punto x e y del que se llamó, si esperas que te dé algo para hacer x++ o y++ entonces no funcionará, llámala mínimo 2 veces para que te de un punto distinto a las coordenadas de tu monito :) .
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

laghengar

Hola   ;D, verás te hago un resumen  8), he modificado la función guarda_camino, ahora lo único que hace es que revisa el camino paso a paso con path_getxy y lo guarda en un array byte camino[90][1] (estoy pensando si no será por declararlo como byte) es una variable del proceso criatura.

Bien, empiezo desde el principio, el proceso criatura llama a path_find, y se pone como paso=0 y n_pasos=0, estas variables paso es para que el proceso no se pierda durante el camino, empieza por el paso 1 y sigue hasta n_pasos. Bien, luego llama a guarda_camino, la función guarda todos los path_getxy en el array byte camino[90][1] en forma de camino[paso][x,y] (0=x, 1=y) a cada bucle aumenta n_pasos del proceso criatura (la variable paso que modifica la función es privada, así que no altera el funcionamiento del camino para el proceso criatura), cuando el último path_getxy coincide con el destino la función finaliza y vuelva al proceso criatura, esta devuelve los valores de camino[paso][x,y] a las variables x_paso, y_paso cada vez que la criatura llega al paso previo (osea, los que indican paso a paso), tras devolver los valores revisa que ninguno sea el 0,0 en ese caso vuelve a volcar valores de camino.[code language="bennu"]if (x==x_paso*escala and y==y_paso*escala and paso<n_pasos)
   repeat
      paso++;
      x_paso=camino[paso][0];
      y_paso=camino[paso][1];
      until((x_paso!=0 or y_paso!=0))
   end[/code]

Bueno, pues no ha sido suficiente, me siguen haciendo lo del 0,0. De todas formas, me he dado cuenta que este método no vale para tiempo real, tengo que hacer que revise el camino en cada frame, lo cual ya cambia la cosa, cambiaré a 005 guardando este código ya que creo que sirve para algo, bien, gracias y un saludo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Bien, creo que ya he encontrado mi fallo, estupidez al canto, lo dicho, if (x==x_paso*escala and y==y_paso*escala and paso<n_pasos) ahí está, esta línea es para comprobar si el proceso criatura ha llegado a x_paso, y paso, si no ha llegado sigue el paso hasta alcanzarlo, el problema es que siempre se inicializa a 0,0, y yo me lo he estado comiendo con papas todo este tiempo, maldita mi descendencia , que locura ,  ;D
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Ole, ya está, ya no van al 0,0 les puedo hacer que formen un muro y otro que esquive el muro, ahora va como me gusta, aunque he visto que si le doy como coordenada destino uno que está ocupado por otro, va y se apunta ese destino también, en fin, miraré a ver como arreglo esto. Gracias prg, tus comentarios me han ayudado

Feliz año nuevo  ;D
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Prg

:) Me alegro que te haya podido ayudar. :) Suerte. y también ¡feliz año nuevo! :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

lol

He descargado y probado el jueguecito, con ese mapa de durezas tan ENORME es normal que path_find no sea capaz de resolver ciertas distancias. Piensa que en cualquier juego de estrategia, el mapa real tiene asociado un mapa de "casillas" muchísimo más pequeño, donde están las durezas a interpretar.

En cualquier caso, estoy haciendo ahora mismo pruebas con path_find, y extrañamente no es capa de resolverme mapas de durezas de 16x16 pixels. Me parece extraño, ¿Puede ser por el mod_path.DLL que lo tengo anticuado?

Por cierto, también tengo un mod_pathfind.DLL, ¿Alguien sabe para qué sirve o si aporta algo mejor? Gracias amiguitos!!!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

probablemente el mod_pathfind.dll es una version vieja, posiblemente de la wip2... no lo se...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

#22
Enorme???, si es de 100x100, no se, a lo mejor es enorme...

Bueno he dejado un zip con el trabajo realizado hasta ahora, no te recomiendo mirarlo mucho ya que tiene algún defecto y está apartado por mi parte.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Windgate

Laghengar, tendrás que disculparme, creo que confundí tu juego con otra descarga, ya he posteado en su respectivo hilo lo que te he dicho por error... (A veces me pongo a leer los posts demasiado rápido)

He bajado tu última versión (Gracias!), y además de poder desplazarme por el escenario lleno de "bichitos" no veo donde está la búsqueda de caminos, ¿Puedes darme alguna instrucción de cómo se "juega"? He mirado el código y sólo responde a la tecla Esc, y clicando con el ratón no consigo nada.

Algo raro me ocurre además, veo que cargas un fpg con un gráfico para el mouse pero no veo el mouse por ningún sitio, no es el primer juego con el que me pasa, no creo que sea problema de las DLL, tengo las últimas versiones.

Cuéntame amigo, estoy ansioso por ver pruebas de path_find, sean como sean. Y gracias por tu aporte.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

laghengar

Perdona, ahora mismo no te puedo ofrecer de mucha ayuda (ando liado con otro tema), bueno te digo que éste código si responde antes los clicks de ratón. Cuando se carga el mapa verás una cosa que va dando vueltas, si le haces click en la bola del centro aparece otra bola abajo a la derecha (similar a cuando clicas en un edificio de crear unidades en los populares juegos de estrategia), después haces click en la bola de abajo y entonces aparece la bola en el mapa que se situa en una posición determinada por código. Puedes crear cuantas bolas te apetezcan y manéjalos como se buscan los caminos, pero te aconsejo que no crees mucho ya que he comprobado que los procesos se vuelven locos cuando uno se entorpece con el otro, pero esto solo ocurre en un número mayor de 10 procesos.

bueno, supongo que no lo disfrutarás mucho, sin embargo espero impulsarte a crear cosas por el estilo. Un saludo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O