Camino más corto entre dos puntos

Started by DCelso, July 08, 2009, 08:25:31 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Hola a todos,
a ver si podeis ayudarme con este ejemplo, (podría valer como un ejemplo corto para el bennu pack).
necesito llegar desde un punto a otro por el camino más corto pero pasando por dentro de un área.
Actualmente voy por la recta que une a los dos puntos pero esta pasa por fuera del área delimitada.
Acepto sugerencias.

En el ejemplo adjunto todo lo necesario, al ejecutar debeis de dar click en la zona blanca de la derecha para ver lo que pasa actualmente. El área que delimita por donde debe moverse es la azul.

Saludos.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

¿Dificil? 13 lo han leído y ni papa :D.
Debe ser facil para quien haya hecho juegos de estrategia en tiempo real o rpgs tipo diablo o aventuras gráficas tipo monkey island, ya que es el control básico :D. ¿Nadie?

A mi se me ocurre ir comprobando con "collision". Si estás colisionando con el área azul va correco y en caso negativo restamos o sumamos uno a la coordenada y. luego lo pruebo y eso.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

#2
porque no revisas mis ejemplos de path find?

http://forum.bennugd.org/index.php?topic=392.0

deja y lo reviso y te doy mi opinión... para que no te sientas mal por no recibir respuestas XD :) (ya me ha pasado... je je je)

mm, ya lo revisé, y lo mejor ceo que es or path find, sólo necesitas crear un mapa de este tipo, será en 8 bits y con negro por don de podemos caminar y blanco por donde no.tal como el que viene en mi ejemplo.

saludos.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Prg

je je, ahí va mi ejemplo...  me gustó cómo quedó, aunque me iba a poner a hacer los poderes del mi personaje 1 en el májico... ups, je je ej, me emocioné con esto.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

DCelso

#4
Gracias, intentaba no usar path find ya que nunca me fue muy bien con ella.
Gracias a tu ejemplo y al post donde hablaste de ella, he descubierto que el png que tienes que pasarle tiene que ser un map de un bit, si le pasas otro de más bits no va muy casto no entiendo el motivo.
En el caso de este map de un bit pasa lo que comentabas, si seleccionas una zona blanca para ir se cuelga el programa al ejecutar path_find, esto tiene que ser un error fijo de la implementación de path_find, no tiene mucho sentido que sea a posta :D.

Con toda la información, he intentado simplificar el ejemplo para ir al grano, he parseado las funciones path_find y path_get para que funcionen mejor a la respuesta esperada.

Ahora al seleccionar en una zona no válida el jugador se acerca a la zona más cercana válida.

A ver que te parece.
De todas formas no se corregir el fallo , que hize a posta, de que hasta que no sueltes el mouse.left no responde el sonic quedándose parado.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

laghengar

Jo***, yo pensaba que te querías hacer una función parecido,  si no te habría puesto yo también el path_find, es fácil solo que tienes que tener cuidado.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

DCelso

Estás en lo cierto, con las prisas se me saltó poner el no.
Buscaba,y busco, no usarlo.
Ya corregí el post anterior.
Quizas mire la implementación de path_find para ver qué es lo que hace :D y hacerlo yo en código bennu, ya veremos.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

#7
mmm,... si lo que quieres es no usar el path find, entonces tendras que buscar algoritmos de búsqueda de caminos, y mediante el map_buffer, o mediante map_get_pixel buscar en el mapa colores = 0 para pasar por esas rutas.

http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda_A*


bueno, pues a investigar... no lo crees? je ej je... suerte!



tu ejemplo de uso de path find funciona muy bien :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

laghengar

Anda, viendo ahora ese gráfico comprendo porqué es tan importante el tamaño total del mapa. Pero ¿cómo sería si hubiese un muro que obligue rodearlo?
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Prg

ahmm, bueno, pues la parte gris sería como un muro...
aunque en bennu no se cómo sea el algoritmo... :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

laghengar

No, no me has entendido  :D, me refiero a que exista un muro que te obligue a rodearlo más todavía

OOOOOOOXOOOOOO
OOOOOOOXOBOOOO
OOAOOOOXOOOOOO
OOOOOOOXXXXXXO
OOOOOOOOOOOOOO

Imaginemos que salimos de A y vamos a B, O son las areas libres y X las obstaculizadas. Perdonad que lo ponga tan cutre, pero es que no tengo tiempo de dibujarlo  ;D
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Prg

depende si buscas a lo ancho o a lo largo, pero una posible forma sería:
OOOOOOOXOOOOOO
OOOOOOOXOBOOOO
OOA1111XOO11111O
OOOOO01XXXXXX1
OOOOOO111111111O

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Windgate

Procedo a mirar tus ejemplos.

Yo hasta ahora había usado path_find, pero lógicamente el tamaño del mapa importa, com mapas de 48x48 pixels hice un laberinto en espiral (El peor de los casos) y no era capaz de resolverlo...

De hecho incluso propuse algunas mejoras para el algoritmo, pero a nivel verbal, todavía no he codeado nada relacionado con búsqueda de caminos con Bennu.

Lo dicho, vamos a ver que has hecho fenómeno xD
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

Prg

ja ja ja, en realidad yo nada amigo, le estaba diciendo a dcelso dónde puede encontrar información si quería hacer su propio algoritmo, pero eso es todo... XD saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

DCelso

Estaba viendo el algoritmo ese "a star", es complejo, he visto que hay un ejemplo de uso en c, a ver si lo puedo adaptar para bennu y lo pruebo. También vi que hay otro más lento pero más eficaz llamado dijkstra. De todas formas  el arreglo del ejemplo ese que hice a path find va bien para mi propósito así que no le daré mucha urgencia.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/