Pour ceux d’entre vous qui sont familiers avec les Design Patterns en science informatique, le concept de »State Machine » vous sonne probablement un son de cloche.
Il s’agit probablement de la façon la plus basique de générer de l’intelligence artificielle dans un jeu vidéo, mais généralement efficace dans le contexte d’un Hack ‘n Slash en 2D.
L’idée est de donner à un NPC (à mon ennemi / boche dans ce contexte) un arbre d’états possibles et de gérer ces états en fonction des événements se déroulant dans le monde du jeu. Le terme »finite » dans Finite State Machine signifie que le nombre d’états de l’intelligence est fini, et qu’il ne pourra y avoir qu’un état présenté à la fois.
Mon ennemi peut donc avoir faim, ou avoir soif, mais pas les deux en même temps 🙂
Dans l’exemple suivant, qui est mon premier prototype qui aura à être peaufiné (mais l’idée est pas mal là), le méchant présente différents états :
il peut patrouiller, pourchasser le héros, s’en éloigner pour avoir un bon angle de tir sans recevoir un coup de tomahawk sur la gueule, il peut aussi tirer et, comme il n’a que quatre balles dans son magasin, il doit aussi recharger parfois.
Oh, et je disais plus haut que l’algorithme ne permettait qu’un seul état à la fois, et bien j’ai un peu menti. Ici, mon boche utilise deux arbres d’états superposés pour gérer son niveau de conscience du danger. Pour le moment, il peut savoir que le joueur approche, ou non. Plus tard, d’autres niveaux de conscience viendront d’ajouter.
Et comme j’ai judicieusement décidé de faire mes tests de code d’abord et de dessiner lorsque le tout serait concluant, il va falloir se servir de son imagination pour aujourd’hui 🙂
Couleur normal = non-conscient de la présence du héros
Bleu = conscient et pourchasse le héros
Vert = tente de garder une distance de tir raisonnable
rouge = prêt à tirer
clignote = il tir!
mauve = recharge après avoir écoulé ses quatre balles
Le tout aura à être ajusté bien sûr (vitesse variable, pause à certain moment, donner une impression d’un méchant un peu plus vivant), mais le résultat final sera assis sur cet arbre d’états.
Et comme il se fait tard, je vous raconterai une prochaine fois de quelle façon je m’y prends pour modifier l’état du bonhomme!