Así que he estado haciendo este juego java 2D de arriba hacia abajo en este marco llamado Greenfoot y he estado trabajando en la IA para los chicos con los que lucharás. Quiero que puedan moverse por el mundo de manera realista, así que pronto me di cuenta, entre otras cosas, que necesitaría algún tipo de búsqueda de caminos.
He hecho dos prototipos A *. Uno está basado en la cuadrícula y luego hice uno que funciona con puntos de referencia, así que ahora necesito encontrar una forma de llegar desde un "mapa" en 2D de los obstáculos / edificios a un gráfico de nodos desde el que pueda hacer un camino. La búsqueda de ruta real parece estar bien, solo mis listas abiertas y cerradas podrían usar una estructura de datos más eficiente, pero llegaré a eso si es necesario.
Tengo la intención de utilizar una malla de navegación por todas las razones descritas en esta publicación en ai-blog.net . Sin embargo, el problema al que me he enfrentado es que lo que A * piensa es que la ruta más corta desde los centros / bordes del polígono no es necesariamente la ruta más corta si viaja a través de cualquier parte del nodo. Para tener una mejor idea, puede ver la pregunta que hice en stackoverflow .
Obtuve una buena respuesta con respecto a un gráfico de visibilidad. Desde entonces compré el libro ( Geometría computacional: algoritmos y aplicaciones ) y leí más sobre el tema, sin embargo, todavía estoy a favor de una malla de navegación (ver " Gestión de la complejidad " de las notas de Amit sobre la búsqueda de caminos ). (Como nota al margen, tal vez podría usar Theta * para convertir varios puntos de referencia en una línea recta si el primero y el último no están ocultos. O cada vez que retrocedo, verifique el punto de referencia antes de la última para ver si puedo ir directamente desde que a esto)
Entonces, básicamente, lo que quiero es una malla de navegación donde una vez que lo haya sometido a un algoritmo de embudo (por ejemplo, este de Digesting Duck ) obtendré la verdadera ruta más corta, en lugar de obtener una que sea la ruta más corta siguiendo solo de nodo a nodo, pero no es el más corto, dado que puede atravesar algunos polígonos y omitir nodos / bordes.
Ah, y también quiero saber cómo sugiere almacenar la información relativa a los polígonos. Para el ejemplo del prototipo de waypoint que hice, solo tenía cada nodo como un objeto y almacené una lista de todos los otros nodos a los que podría viajar desde ese nodo, supongo que eso no funcionará con polígonos. ¿Y cómo puedo saber si un polígono es abierto / transitable o si es un objeto sólido? ¿Cómo almaceno qué nodos forman el polígono?
Finalmente, para que conste: quiero programar esto desde cero a pesar de que ya hay otras soluciones disponibles y no tengo la intención de (re) usar este código en otra cosa que no sea este juego, por lo que no importa inevitablemente será de mala calidad.