Cliquer ici pour revenir au début du tutoriel.

Afin de rendre le jeu un peu plus vivant, nous allons lui rajouter des effets sonores. Pour cela il faut coder la fonction joueBruitages() dont nous avons parlé lors de la première étape.

...
void loop() {
 afficheGraphismes();
 joueBruitages();
 surveilleTouches();
 // logiqueJeu();
 }

Pour savoir quel son doit jouer cette fonction, on va se servir d’un événement. Il s’agit d’une variable qui prendra comme valeur les différents sons qui peuvent être joués.

...
 {'M',' ',' ','M'},
 {'M','M','M','M'}};

// 
// LES SONS 
//
#define RIEN 0
#define DEPLACEJOUEUR 1
#define BOUGECAISSE 2
int sonAJouer = RIEN; // Par défaut: on ne joue aucun son

//
// LES GRAPHISMES
//

...

Pour chaque événement, on jouera un son différent qui durera toujours la même durée (comme ça la vitesse du jeu sera constante et ne variera pas en fonction du son qui est joué). La longueur du son qui sera joué peut être de 20 milli-secondes, cela est suffisant long pour être audible, et c’est aussi suffisamment rapide pour ne pas ralentir le jeu.

Et la fonction sera alors:

...
#define BOUGECAISSE 2
int sonAJouer = RIEN; // Par défaut: on ne joue aucun son

void joueBruitages() {
  switch (sonAJouer) {
    case DEPLACEJOUEUR:
      // on joue un son un peu aigu pour les déplacements du joueur
      frequenceBuzzer(1000,20);
      break;
    case BOUGECAISSE:
      // et un son plus grave pour les déplacements de caisse
      frequenceBuzzer(500,20);
      break;
    case RIEN:
      delai(20);
    default:
      delai(20);
      break;
  }
  //une fois qu'on a joué le son demandé, on remet l'évènement à zéro
  sonAJouer = RIEN;
}

//
// LES GRAPHISMES
//

void dessineMur(int ligne, int colonne) {
 creerRectangle(colonne*4,ligne*4,colonne*4+4,ligne*4+3,1,NOIR);
...

Maintenant, essayez de deviner où on doit ajouter les deux lignes suivantes dans le programme:

sonAJouer = DEPLACEJOUEUR;

et

sonAJouer = BOUGECAISSE;

C’est dans la fonction deplace(int dir). On sait qu’il va y avoir un déplacement. On peut donc ajouter le sonAJouer = DEPLACEJOUEUR; au début de la fonction. Et dans le test du déplacement de caisse, on ajoutera le sonAJouer = BOUGECAISSE. Voilà le résultat:

...
void deplace(int dir) {
  sonAJouer = DEPLACEJOUEUR;

   // si la case suivant le joueur est un mur
   if (SUIVANTE(dir,1) == 'M') {
     return;
   }
...

   // à ce point du programme, on sait que le déplacement est autorisé 
   // Si la case du dessus contient une caisse
   if (SUIVANTE(dir,1) == '$' || SUIVANTE(dir,1) == '*') {
     sonAJouer = BOUGECAISSE;
     if (SUIVANTE(dir,2) == '.') {
       SUIVANTE(dir,2) = '*'; } else {
...

Le résultat de cette étape est disponible ici:

https://github.com/Papamaker/kitco/blob/master/lib/src/sokoban/sokobanEtape3/sokobanEtape3.ino

 

 

 

Publicité