Je ne connais pas grand-chose à la machine à états finis en IA ou aux autres comportements de jeu dans le jeu, à l'exception de ce tutoriel rapide avec un mineur: http://www.ai-junkie.com/architecture/state_driven/tut_state1.html qui est orienté objet.
Je ne sais pas vraiment si ce tutoriel décrit le modèle State ou non, qu'en pensez-vous?
Je ne parle pas d'autres choses plus orientées vers l'arithmétique comme la direction ou la physique ou la recherche de chemin ou les collisions, mais plutôt de la logique du jeu, de l'IA pilotée par l'état et de choses qui impliquent beaucoup d'états simultanés et if
s et / ou switch
es
Quels sont les avantages / inconvénients de l'utilisation d'un modèle d'état ou d'une vérification séquentielle d'une structure d'état simple comme celle-ci:
struct States
{
bool is_walking, is_running, holds_a_weapon, is_crouch;
int weapon_id, int id_team;
};
void HandleStates (States state)
{
//etc
}
Réponses:
J'essaierai d'y répondre du mieux que je pourrai, mais il y a certaines "meilleures pratiques" sur lesquelles je ne suis pas sûr, mais j'essaierai de les décomposer aussi clairement que possible.
FSM
Tout d'abord, le didacticiel Miner provient de Programming Game AI by Example de Mat Buckland (que je vous recommande d'obtenir comme introduction à l'IA). Il utilise une énumération pour chaque état, PAS une structure. Avec la structure dans votre exemple, vous avez des booléens comme états, vous pouvez donc avoir n'importe quel nombre de ceux-ci en même temps. Cela peut conduire au comportement que vous souhaitez, mais le plus souvent avec les FSM (Finite State Machines), il conduit à un comportement indésirable.
Par exemple:
Deuxièmement, ce n'est pas la seule façon dont il décrit les États. La manière que je préfère personnellement (selon la situation) est de créer une classe abstraite appelée State qui a une fonction Enter (), Exit () et Update (). Créez ensuite mes états en tant que sous-classes de la classe State.
Comme cette image (qui se trouve en fait à la page 2 de ce lien):
Modèle d'état
À mon avis personnel, le modèle d'état n'est qu'une partie de la conception de logiciels où le logiciel a un certain nombre d'états. L' implémentation appartient au développeur. Je ne pense pas qu'il y ait une différence appropriée entre l'utilisation d'une instruction Big Switch ou la création d'une machine d'état complète pour exécuter tous vos états comme je l'ai indiqué ci-dessus. Ils font essentiellement la même chose. À cet égard, la réponse à l'une de vos questions est oui, je crois que cette page décrit le modèle d'état.
Avantages / inconvénients
Il existe des avantages et des inconvénients à toute méthode que vous utilisez pour implémenter une conception pilotée par l'état.
Utilisation d'une instruction If / Else ou Switch
Avantages:
Les inconvénients:
Utilisation d'une machine à états orientée objet
Avantages:
Les inconvénients:
J'espère que cela répond à toutes vos questions. En fait, je viens d'ouvrir ma copie de Programming Game AI par exemple et Mat mentionne que la machine d'état est connue sous le nom de "modèle de conception d'état". Personnellement, je ne suis pas d'accord, mais pour chacun le sien.
J'espère que cela aide :)
la source