Suite de la reprise des tutoriaux de Crait pour créer un jeu

Continuons à reprendre les tutoriaux de Crait pour apprendre à coder un jeu pour l’Arduboy pour en faire un tutoriel en français pour la Gamebuino-META. Ce tutoriel fait suite à celui disponible ici : Conversion des tutoriels de Crait (Make your own game parties 1 à 3) - #3 by Jicehel
Nous en sommes donc à la partie 4 : Make Your Own Arduboy Game: Part 4 - Questions & Button Input disponible ici : Make Your Own Arduboy Game: Part 4 - Questions & Button Input - Lessons - Arduboy

Une question importante

Lorsque Crait enseignait la programmation aux jeunes enfants et il leur posait toujours une question très importante. Pensez-y une seconde : quelle est la couleur préférée d’un ordinateur ?
Et il a entendu tellement de réponses différentes à cette question. Par exemple, un enfant lui a dit : « Vert ! Parce que les hackers utilisent du texte vert sur leur écran ! ” :blush: C’était faux, c’est sûr. La bonne réponse étant que les ordinateurs n’ont pas de couleur préférée puisqu’ils n’ont pas d’opinion. Vous ne pouvez simplement pas demander à un ordinateur quelle est sa couleur préférée. Les seules questions que vous pouvez lui poser sont d’évaluer des nombres, de vérifier la valeur d’une variable ou de compter quelque chose.

Empêcher les robots de se laver les cheveux

Vous vous souvenez dans la partie précédente de ce tuto dans laquelle Crait vous avait parlé du dos des flacons de shampoing et des instructions qui s’y trouvaient:

  • Faire mousser
  • Rincer
  • Répétez

Le problème avec ces instructions, c’est que si vous les avez données à un robot, il répétera ces étapes indéfiniment. Nous devons donc mettre en œuvre un moyen d’empêcher le robot de faire cela. En programmation informatique, nous pouvons utiliser des instructions conditionnelles. Ce sont essentiellement des questions que nous posons à l’ordinateur et si la réponse est vraie, alors il doit suivre des instructions différentes, ce qui donnerait dans notre exemple quelque chose comme :

  • Faire mousser
  • Rincer
  • Si vous avez encore besoin de vous laver les cheveux, répétez

Le premier type d’instructions conditionnelles avec lesquelles vous entrerez en contact sont les instructions if. Comme dans l’exemple ci-dessus, vous pouvez essentiellement demander à l’ordinateur de faire quelque chose si le résultat d’un test est vrai. Un robot qui suit les instructions ci-dessus ne se lavera pas les cheveux éternellement puisqu’il finira par constater qu’il n’a plus besoin de se les laver.

Boutons

Nous pouvons également utiliser des instructions if pour tester l’état des boutons ! C’est ainsi que les jeux vidéo savent si vous appuyez sur des boutons. Déplacer un personnage peut ressembler à ceci :

  1. Si le bouton « droite » est enfoncé, déplacez le caractère vers la droite
  2. Si le bouton « gauche » est enfoncé, déplacez le caractère vers la gauche
  3. Afficher l’image du personnage à l’écran
  4. Répétez

Format

Le format des instructions if en C/C++ est :

if (quelque chose est vrai) {
    DoSomething();
}

Seulement si quelque chose est vrai , alors DoSomething(); s’exécutera pour faire quelque chose que nous aurons définit.
Pour vérifier si le bouton A est enfoncé, nous devons utiliser la fonction (gb.buttons.repeat(BUTTON_A, 0)). En le mettant dans le bon format, il ressemblera à ceci :

if  (gb.buttons.repeat(BUTTON_A, 0)){
    DoSomething();
}

Nous verrons que la Gamebuino META nous pouvons tester les boutons de différentes manières en fonction des besoins. On peut tester avec gb.buttons.pressed si le bouton a été appuyé, gb.buttons.held permet de tester si un bouton a été pressé pendant un certain temps (à travers le nombre de frames qui se sont écoulées pendant qu’il était enfoncé), on a aussi gb.buttons.repeat mais vous retrouverez toutes ses informations dans les références : Référence - Gamebuino
Ci-dessus, nous avons vérifié si le bouton A était enfoncé, mais nous pouvons également vérifier si le bouton A n’était pas enfoncé !

if(gb.buttons.repeat(BUTTON_A, 0) == false ) {
    DoSomething();
}

Donc nous dans notre programme, nous allons plutôt utiliser gb.buttons.pressed pour juste valider si la touche a été enfoncé. Choisissez bien vos commandes en fonction de vos besoins.
On teste juste que le résultat n’est pas vrai. Notez que nous utilisons un double signe égal == au lieu d’un simple signe égal = . Vous verrez principalement cela à l’intérieur des instructions conditionnelles. Ne vous laissez pas effrayer ! Un seul signe égal = signifie que vous attribuez une valeur. Un double signe égal == permet de tester la valeur. J’en reparlerai plus tard !
La bibliothèque de la META inclut également la fonction appelée avec gb.buttons.released, qui permet de tester si le boutton a été relâché. qui nous permet de simplifier le code ci-dessus pour :

if(gb.buttons.released (BUTTON_A)) {
    DoSomething();
}

Cool, non ? !

Modification du code

Allons récupérer le dernier code du tutoriel et modifions le :

//Jonathan Holmes (crait)
//18 octobre 2016
// Impression de texte

// Inclure la bibliothèque
#include <Gamebuino-Meta.h>

// Initialiser notre variable counter

int counter;

// La fonction setup() s'exécute une fois lorsque vous allumez votre console
void setup() {

    //Démarrer votre Gamebuino META proprement
    gb.begin();

    // Affecter 0 à la valeur de notre variable counter pour l’initialiser
    counter = 0;

}


// La fonction loop() se répète indéfiniment une fois que la fonction setup() est traitée.
void loop() {

    // Instruction de gestion et de régulation de la META 
    while(!gb.update());

    // Effacer tout ce qui est imprimé à l'écran
    gb.display.clear();

    // Augmente la valeur du compteur de 1
    counter = counter + 1;

    //Affiche à l’écran la valeur de counter ;
    gb.display.print(counter);

}

Rappelez-vous que le compteur est notre variable qui augmente indéfiniment dans notre code précédent. Ce que nous allons faire, c’est changer ce code pour augmenter ou diminuer le compteur selon que vous maintenez enfoncé le bouton Haut ou le bouton Bas.

Nous devons trouver la ligne qui augmente le compteur et la supprimer. Après avoir effacé l’écran avec arduboy.clear(); , ajoutons le code suivant :

  if(gb.buttons.pressed(BUTTON_UP)){
    // Augmenter le compteur
  }

  if(gb.buttons.pressed(BUTTON_DOWN)){
    // Diminuer le compteur
  }

Notre code pour augmenter le compteur était compteur = compteur + 1 ; . En utilisant ce code, nous pouvons le diminuer en changeant le signe plus par le signe moins. Pour diminuer compteur , notre code sera par conséquent : compteur = compteur - 1 ; . Essayez de les brancher et lorsque vous avez terminé, vérifiez s’il s’agit du même code que le code complété ci-dessous à la fin de ce post.

Tester les nombres et les variables

J’allais terminer le tutoriel maintenant, mais prolongeons le un peu plus et parlons des tests de nombres !

Je vous ai déjà dit qu’à l’intérieur d’une instruction if, vous pouvez vérifier si quelque chose est vrai ou faux. Mais, vous pouvez également vérifier les valeurs des variables ou des nombres.

if( counter == 36 ) {
  gb.display.setCursor(30, 30);
  gb.display.print("Yay!");
} 

Que pensez-vous qu’il se passerait si vous exécutiez le code ci-dessus ?
Si le compteur est égal à 36, alors la console placera le curseur en 30, 30 et imprimera “Yay!” à l’écran. Notez que vous pouvez mettre plusieurs lignes de code à l’intérieur des instructions if.

Ajoutez cela juste après les autres instructions if qui vérifient les boutons Up et Down.

Le code terminé

//Jonathan Holmes (crait)
//18 octobre 2016
// Impression de texte

// Inclure la bibliothèque
#include <Gamebuino-Meta.h>

// Initialiser notre variable counter

int counter;

// La fonction setup() s'exécute une fois lorsque vous allumez votre console
void setup() {

    //Démarrer votre Gamebuino META proprement
    gb.begin();

    // Affecter 0 à la valeur de notre variable counter pour l’initialiser
    counter = 0;

}


// La fonction loop() se répète indéfiniment une fois que la fonction setup() est traitée.
void loop() {

    // Instruction de gestion et de régulation de la META 
    while(!gb.update());

    // Effacer tout ce qui est imprimé à l'écran
    gb.display.clear();

    // Teste si on a appuyé sur la flèche vers le haut
    if(gb.buttons.pressed(BUTTON_UP)){

            // Augmente la valeur du compteur de 1
            counter = counter + 1;
    }

    // Teste si on a appuyé sur la flèche vers le bas
    if(gb.buttons.pressed(BUTTON_DOWN)){

            // Diminue la valeur du compteur de 1
            counter = counter - 1;
  }

  // Vérifie si counter est égale à 36
  if( counter == 36 ) {
    
      // Place le curseur en 30,30
      gb.display.setCursor(30, 30);

      // Affiche le Yay par ce que c’est ce que l’on veut afficher
      gb.display.print("Yay!");

  }

    //Affiche à l’écran la valeur de counter ;
    gb.display.print(counter);

}