Déplacement
Déplacement dans le Labyrinthe
Objectif
Apprendre à gérer les événements clavier en JavaScript pour permettre à l'utilisateur d'interagir avec le jeu.

Notions théoriques
Le JavaScript est un langage événementiel, ce qui signifie que beaucoup de code s'exécute en réponse à des événements.
Dans un jeu comme Pacman, les événements clavier sont essentiels pour contrôler les mouvements du personnage.
En JavaScript, l'écoute d'événements se fait grâce à la méthode addEventListener, qui permet de réagir à des actions de l'utilisateur, comme appuyer sur une touche.
Pour Pacman, nous utiliserons addEventListener pour écouter les événements keydown,
qui sont déclenchés lorsque l'utilisateur appuie sur une touche.
La propriété
event.keynous permet de savoir quelle touche a été pressée.
Voici en Javascript comment écouter un évènement keydown du clavier :
// Ecouter l'évènement keydown du clavier et exécuter une fonction
useEffect(() => {
function handleKeyDown(event) {
// Il suffit de placer ici le nom de la fonction qui doit être appelée
// lorsque l'utilisateur a appuyé sur une touche du clavier.
}
// Ajouter l'écouteur de l'évènement 'Appui sur une touche'
document.addEventListener("keydown", handleKeyDown);
// Retirer l'écouteur de l'évènement 'Appui sur une touche' lorsque l'appui a été traité
return () => document.removeEventListener("keydown", handleKeyDown);
// Indiquer ici le nom de la variable dépendante qui sera modifiée suite à l'appel
// de la fonction indiquée dans handleKeyDown(event) {...}
}, [positionDeObjet]);
Il est important de gérer correctement ces événements pour que le personnage ne traverse pas les murs ;-) et se déplace seulement là où c'est possible !
Exemple pratique
Dans notre jeu de Pacman, nous pourrons écouter l'évènement keydown du clavier et exécuter la fonction deplacerPacman, avec ce code :
// Ecouter l'évènement keydown du clavier et exécuter la fonction deplacerPacman
useEffect(() => {
function handleKeyDown(event) {
deplacerPacman(event.key, pacmanPosition, labyrinthe, setPacmanPosition);
}
document.addEventListener("keydown", handleKeyDown);
return () => document.removeEventListener("keydown", handleKeyDown);
}, [pacmanPosition]);
Et voici un extrait de la fonction deplacerPacman qui va pouvoir déplacer le Pacman en fonction de la touche appuyée :
document.addEventListener('keydown', function(event) {
switch(event.key) {
case 'ArrowUp':
// Déplacer Pacman vers le haut si possible
break;
case 'ArrowDown':
// Déplacer Pacman vers le bas si possible
break;
case 'ArrowLeft':
// Déplacer Pacman vers la gauche si possible
break;
case 'ArrowRight':
// Déplacer Pacman vers la droite si possible
break;
}
});
Quelques éléments de code à connaître
addEventListener(type, listener): Attache une fonction à appeler chaque fois que l'événement spécifié est délivré à la cible.removeEventListener(type, listener): Supprime un écouteur d'événement.event.key: Retourne la valeur de la touche du clavier qui a été pressée lors d'un événement clavier.