[crossposted de stackoverflow]
Dans un jeu tel que Warcraft 3 ou Age of Empires, la manière dont un adversaire IA peut se déplacer sur la carte semble presque illimitée. Les cartes sont énormes et la position des autres joueurs change constamment.
Comment fonctionne le repérage de l'IA dans des jeux comme ceux-ci? Les méthodes standard de recherche de graphes (telles que DFS, BFS ou A *) semblent impossibles dans une telle configuration.
ai
path-finding
game-mechanics
search
des couvertures
la source
la source
Réponses:
Dans la plupart des cas, l'utilisation de A * sur un maillage de navigation (communément appelé "navmesh") est la solution de recherche de cheminement commerciale utilisée par les RTS. Il existe une explication détaillée du fonctionnement de navmeshes, pourquoi ils constituent une meilleure solution que les systèmes de points de cheminement, ainsi que des liens vers des ressources de mise en œuvre, ici .
Si vous envisagez de développer des modes de jeu spéciaux (capture de points / nœuds) ou des unités qui patrouillent, se mettent à l’abri, etc., vous voudrez probablement mettre en place une couche de points de cheminement au-dessus de votre navmesh, pour contrôler le comportement de l’intelligence artificielle (et non la recherche de trajectoire ).
la source
Découvrez l' algorithme Flowfield utilisé dans Supreme Commander 2. Il fait beaucoup mieux que la plupart des systèmes de recherche de chemins RTS (passez à 0:50 pour quelques exemples).
la source
Beaucoup de jeux plus anciens utilisent A *. Le Starcraft original utilisait A *; ce qui a conduit à des problèmes dans le traitement de la collision. Starcraft 2 gère très bien les collisions, utilisant un comportement de swaming / flock pour maintenir le contrôle fluide des grands groupes. Cet article de gamedev explique comment cela pourrait être réalisé.
la source
Je suis d’accord sur l’autre réponse déjà, mais essayez aussi de penser à WoW / Warcraft3 comme à des mondes 2D réels. Ils ne sont pas si différents des tuiles, c'est juste les tuiles.
Vous pouvez également penser à la manière dont un GPS trouve le meilleur chemin? il y a une foule d'algortimns pour parcourir les cartes liées.
Je pense que certains des premiers scripts "Quake bots" pourraient également vous aider, car ils ont été développés pour fonctionner dans des "zones inconnues", car nous pouvions concevoir nos propres niveaux à partir de zéro.
Globalement, ma façon personnelle de gérer une telle carte serait de la considérer comme le guide A *. Mais tout d’abord, je calculais à l'avance chaque "point de mosaïque" et les indexais avec "le plus proche voisin", etc. toucher au but.
Selon le type de jeu et le paysage / scénario, différentes tactiques de pré-analyse peuvent également être utiles. Certains jeux ont très peu d'obstacles et ceux-ci peuvent être des mouvements "streight line" + quelques "comment je me déplace" pour les objets.
J'espère que cela a un sens et que vous avez peut-être réfléchi.
la source
La plupart des jeux utilisent une sorte d'algorithme de recherche ou A * pour trouver des chemins sur une carte. L'intelligence artificielle a été légèrement modifiée à certains égards pour des raisons de performances.
Vous remarquerez cela dans Starcraft 2, où Zerglings n’a manifestement pas la moindre trajectoire, ce serait un cauchemar pour le processeur de le faire pour Zerglings. Ils font juste le mieux pour aller de A à B et ne tentent même pas de trouver le meilleur chemin. Ils s'approcheront le plus près possible du goulot d'étranglement ou des rampes.
la source
La carte est une grille. La grille est un graphique. A * fonctionne sur un graphe, c'est un algorithme de recherche de graphes. Un * devrait chercher quelques nœuds de graphe.
Comme il a été mentionné, ils peuvent utiliser le maillage de navigation. Mais le A * (ou quelque chose de similaire) sera quand même au dessus de ce maillage, car les polygones de ce maillage ne sont que des nœuds d'un graphe; A * cherchera alors le chemin d'un polygone à un autre.
Pas sûr de Warcraft ou des jeux commerciaux, mais il y a aussi une technique appelée Diffusion Collaborative et c'est très simple; cela se fait habituellement sur une grille. Il existe également une technique appelée Champs potentiels , qui est très similaire à la précédente sinon identique.
Vous pourriez aussi essayer:
la source
Je ne suis absolument pas expérimenté, mais je pense qu'une bonne solution repose sur des méthodes heuristiques et non sur une vérification complète de la carte connue. Les heuristiques auxquelles je peux penser sont locales et basées sur l'expérience. Les commandes locales peuvent être basées sur la vérification du terrain et les obstacles, en continuant de progresser dans la direction requise. Je pense que la plupart des cartes ne nécessitent pas de mouvements complexes ressemblant à des labyrinthes, mais sont plutôt connectées. Une autre heuristique consiste à utiliser les chemins connus précédents (explorés par d'autres unités ou explicitement par l'utilisateur) pour déplacer des unités vers des positions connues ou presque connues. Mais je parle de passer sur de grandes cartes, pas vraiment dans des espaces fermés comme l’a dit ZorbaTHut. Dans les cas surpeuplés, l'algorithme peut être plus complexe, nécessitant des sortes de "prédiction", une coordination entre les unités d'une même équipe ou simplement des stratégies d'attente ressemblant à des sémaphores. Également,
Je pense que les algorithmes heuristiques sont bons car ils fournissent généralement une bonne solution sur les grands espaces avec un temps de calcul raisonnable (ce qui est important lorsque vous déplacez plusieurs unités).
Désolé si cette réponse est générique: j'ai travaillé avec des foules, mais l'espace était assez particulier et je ne peux pas expliquer exactement le fonctionnement de l'algorithme (basé sur les agents, de toute façon, non défini globalement). J'espère que ma réponse vous donnera des idées utiles.
la source