2009-04-09 11 views
10

Actualmente estoy escribiendo un juego de Java muy básico basado en la idea de Theme Hospital.Pathfinding 2D Java juego?

Soy bastante nuevo en Java y actualmente estoy estudiando en la universidad en mi primer año. He hecho Java durante casi dos años, y ahora finalmente dedico mi tiempo a un proyecto decente.

Estoy en la etapa en la que necesito crear una persona (paciente) para ser admitido en el hospital. Deben ir a la recepción, luego a la oficina de GP y luego a su posición inicial.

He examinado la ruta A *, pero me parece realmente complicado. Entiendo cómo funciona, creo, pero no estoy seguro de cómo implementarlo en mi juego.

Hasta ahora, el usuario puede colocar un mostrador de recepción y construir una oficina de GP. Cada uno de estos tiene un "punto de uso" que será el lugar al que el paciente debe llegar. Los cuadrados de la cuadrícula solo pueden estar llenos o no, no habrá un terreno diferente.

Dudo en pegar ningún código aún, ya que es complicado ya que he aprendido muchas técnicas nuevas relacionadas con la GUI en los últimos meses. Mi plan es llegar al hito 1, hacer que el paciente vaya al escritorio y luego a la oficina y luego irse. Una vez que tenga esto, ordenaré más el código.

He visto muchas implementaciones de A * y muchos tipos diferentes. ¿Puede alguien darme un punto de partida con el que pueda trabajar? ¿Debo tratar de adaptar un conjunto de clases ya escrito, o intentar escribir el mío desde el principio?

+0

ver mi publicación para ver el enlace a una implementación A *. – TofuBeer

Respuesta

6

Si desea A *, es la implementación óptima para la ruta basada en la cuadrícula.

Esto podría ayudarle a cabo:

http://www.cokeandcode.com/main/tutorials/path-finding/

EDIT: El enlace precedente es bueno tanto como un conjunto implementable de clases y como guía para la personalización de la ruta de búsqueda de métodos para resolver su satisfacción .

+0

Ah, sí, encontré esto hace meses cuando primero investigaba cosas para mi idea de juego. Voy a volver a leerlo, a ver si ayuda. Gracias :) – Relequestual

4

El libro AI for Game Developers tiene una muy buena explicación de A *. De hecho, iba a escribir una implementación hoy ... si lo hago, lanzaré el código aquí.

El código está hecho, es demasiado grande para ponerlo aquí, por lo que puede tomarlo de: https://chaos.bcit.ca/svn/public/astar/ (certificado autofirmado, pero el servidor no hace nada malo).

Seguí el pseudo-código en el libro en su mayor parte, pero hice todo mucho más orientado a objetos que cualquier cosa que haya visto hasta ahora para A *.

Tiene un Laberinto que consiste en Azulejos. Cada Azulejo tiene una Ubicación y un Obstáculo (nulo si no hay ningún obstáculo).

Puede usar un PathFinder (como AStar) para encontrar la ruta más corta entre una ubicación de inicio y finalización determinada. Obtienes un camino de regreso que incluye los azulejos que necesitas atravesar para llegar desde el principio hasta el final.

Puede cambiar el cálculo heurístico proporcionando un HeuristicCalculator diferente (el actual solo comprueba si hay un Obstáculo o no y calcula el número más bajo de Tiles para atravesar, puede agregar pesos a diferentes Obstáculos para instancia si no te gusta el valor predeterminado).

El código es una licencia bajo la LGPL, por lo que si realiza cambios y distribuye la aplicación debe hacer que los cambios estén disponibles. No dude en enviar informes/correcciones de errores a la dirección de correo electrónico en el comentario de la licencia (que se encuentra en cada encabezado).

Voy a (nunca lo hice) para comentarlo después de los exámenes, pero creo que es bastante sencillo.

+0

wow me gusta SO, respuestas muy rápidas. Gracias, eso sería genial si lo hicieras. ¡Si utilicé su implementación, por supuesto le daría todo el crédito! – Relequestual

+0

no se preocupe (solo algunos ex alumnos saben mi verdadero nombre aquí de todos modos :-) – TofuBeer

+1

Siempre que publique algo interesante, amplio o interesante obtendrá respuestas rápidas. Preguntas técnicas precisas en áreas con las que poca gente tiene experiencia, o preguntas mal redactadas con pocos detalles y verá el lado más tranquilo de SO. :) –

2

Naturalmente, aprenderá mucho sobre pathfinding si escribe su propia implementación. Pero también pasarás mucho tiempo haciéndolo.

Echa un vistazo a la biblioteca JGraphT que trata con gráficos en general, tiene una buena API y admite more algoritmos de ruta más cortos que solo A *.

+0

Gracias por el enlace JGraphT. –

5

Este es el mensaje de búsqueda de caminos más informativo que he visto hasta la fecha: http://www.ai-blog.net/archives/000152.html

+1

Artículo fresco, gracias. –

+0

El enlace está caído. – Laurent

+1

El enlace está (efectivamente) roto. Redirige a la página principal de ese sitio. –

0

Tal vez encontrado lo que quería, pero aquí hay un enlace con una buena explicación de pathfinding A *. Tuve que implementar A * para mi juego en C++, y me ayudó mucho a entender cómo funciona.

http://www.abdn.ac.uk/~csc245/teaching/CS1015/practicals/aStarTutorial.htm

+0

El enlace está (efectivamente) roto: * No tiene permiso para acceder a /~csc245/teaching/CS1015/practicals/aStarTutorial.htm en este servidor. * –