Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Les états d'un joueur : machine à états

Après cette leçon: Je peux décrire un personnage par ses états et écrire la règle qui donne l'état suivant.

Leçon de 60 min2 commandesLab de développement de jeux : boucle de jeu, gravité et collisions dans le navigateur

Comment un jeu se souvient de son état

Une machine à états décrit un personnage par les états qu'il peut prendre. Des événements le font passer de l'un à l'autre. Un personnage est au sol, en saut ou en chute, jamais dans deux états à la fois.

Cette manière de penser évite un bug fréquent. Le personnage saute dans les airs, parce que le jeu ne savait pas qu'il y était déjà.

À la fin de cette leçon

Remarque

Je peux décrire un personnage par ses états et écrire la règle qui donne l'état suivant.

Mots clés

MotCe que ça veut direExemple
Étatce que le jeu sait à un instant : au sol, en saut, partie terminée
Événementquelque chose qui arrive : une touche, un choc, un sommet atteint
Transitionle passage d'un état à un autre, quand un événement arrive
Machine à étatsla liste des états et des transitions permises
Entréece que le joueur fait au clavier ou à l'écran tactile
Booléenune valeur vrai ou fauxtrue

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un état est ce que le jeu retient

Un jeu garde en mémoire quelques valeurs. Ce sont le score, le nombre de vies, la position du joueur, et un booléen qui dit si la partie est terminée. Ensemble, elles forment l'état du jeu.

À chaque image, la mise à jour lit cet état, le change un peu, puis le dessin le montre. Le jeu ne voit jamais le passé, il ne voit que son état présent.

Une touche change l'état, la boucle le lit

Le clavier prévient le jeu par des événements : une touche est enfoncée, puis relâchée. Le jeu ne bouge pas le personnage à ce moment. Il note seulement dans un booléen que la touche est tenue.

C'est la boucle qui, à l'image suivante, lit ce booléen et déplace le personnage. Ainsi le mouvement reste régulier, même si le clavier répète les événements.

Exemple : noter les touches dans des booléens

Code: web
<p>Cliquez sur la page, puis tenez la flèche droite.</p>
<p id="sortie">touche tenue : non</p>

Avant de lancer les Run

Remarque

Démarrez le labo et ouvrez le terminal. Les deux Run cherchent des mots dans le fichier game.js du jeu « Catch the stars ». Ils écrivent un nombre ou des lignes de code, dont les noms sont anglais : gameOver veut dire partie terminée.

Compter les lignes qui parlent de gameOver

Commande
docker exec jupyter grep -c gameOver game/game.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Trouver où gameOver change de valeur

Commande
docker exec jupyter grep -n "gameOver = " game/game.js

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ce que montre le fichier du jeu

Le premier Run écrit 6 : six lignes du jeu parlent de gameOver. Le second écrit deux lignes. À la ligne 48, gameOver passe à false : c'est le début d'une nouvelle partie.

À la ligne 83, il passe à true : c'est le moment où les vies tombent à zéro. Le jeu a donc deux états, en cours et terminé.

Une machine à états liste les passages permis

Pour un personnage, on écrit chaque état, puis chaque événement qui le change. Au sol, l'appui sur saut mène à l'état en saut. Au sommet, le personnage passe en chute. À l'atterrissage, il revient au sol.

Un événement qui n'est pas prévu pour un état ne fait rien. En chute, appuyer sur saut ne donne pas un second saut.

Une erreur fréquente

Attention

Beaucoup écrivent un booléen par situation : en_saut, en_chute, au_sol. Ils peuvent alors être vrais en même temps, ce qui n'a aucun sens. Utilisez une seule valeur d'état à la fois. Le personnage est dans exactement un état.

À propos de ce labo et de sa source: Lab de développement de jeux : boucle de jeu, gravité et collisions dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.