J'ai donc créé ce jeu java 2D descendant dans ce cadre appelé Greenfoot et j'ai travaillé sur l'IA pour les gars que vous allez combattre. Je veux qu'ils puissent se déplacer dans le monde de manière réaliste, alors j'ai vite réalisé, entre autres choses, que j'aurais besoin d'une sorte de guide.
J'ai réalisé deux prototypes A *. L'un est basé sur une grille , puis j'en ai créé un qui fonctionne avec des points de cheminement, alors maintenant je dois trouver un moyen de passer d'une "carte" 2d des obstacles / bâtiments à un graphique de nœuds à partir duquel je peux faire un chemin. Le cheminement réel semble bien, juste mes listes ouvertes et fermées pourraient utiliser une structure de données plus efficace, mais j'y reviendrai si et quand j'en ai besoin.
J'ai l'intention d'utiliser un maillage de navigation pour toutes les raisons exposées dans cet article sur ai-blog.net . Cependant, le problème que j'ai rencontré est que ce que pense A * est le chemin le plus court à partir des centres / bords du polygone n'est pas nécessairement le chemin le plus court si vous voyagez à travers une partie du nœud. Pour avoir une meilleure idée, vous pouvez voir la question que j'ai posée sur stackoverflow .
J'ai obtenu une bonne réponse concernant un graphique de visibilité. Depuis, j'ai acheté le livre ( Computational Geometry: Algorithms and Applications ) et j'ai approfondi le sujet, mais je suis toujours en faveur d'un maillage de navigation (voir " Managing Complexity " dans les notes d' Amit sur Path-Finding ). (En remarque, je pourrais peut-être utiliser Theta * pour convertir plusieurs points de cheminement en une seule ligne droite si le premier et le dernier ne sont pas masqués. Ou chaque fois que je reviens en arrière, vérifiez avant le dernier point de cheminement pour voir si je peux aller directement de que pour cela)
Donc, fondamentalement, ce que je veux, c'est un maillage de navigation où une fois que je l' aurai mis à travers un algorithme d'entonnoir (par exemple, celui de Digesting Duck ), j'obtiendrai le vrai chemin le plus court, plutôt que d'en obtenir un qui est le chemin le plus court suivant nœud à nœud uniquement, mais pas le plus court étant donné que vous pouvez parcourir certains polygones et ignorer les nœuds / bords.
Oh et je veux aussi savoir comment vous proposez de stocker les informations concernant les polygones. Pour l'exemple de prototype de waypoint que j'ai fait, je viens d'avoir chaque nœud en tant qu'objet et de stocker une liste de tous les autres nœuds vers lesquels vous pouvez voyager à partir de ce nœud, je suppose que cela ne fonctionnera pas avec les polygones? et comment savoir si un polygone est ouvert / traversable ou s'il s'agit d'un objet solide? Comment puis-je stocker les nœuds qui composent le polygone?
Enfin, pour mémoire: je veux le programmer moi-même à partir de zéro même s'il existe déjà d'autres solutions disponibles et je n'ai pas l'intention de (ré) utiliser ce code dans autre chose que ce jeu, donc peu importe que ce sera inévitablement de mauvaise qualité.