Avant de plonger dans les lignes de code, il faut toujours se poser un moment et se dire "Comment vais-je organiser mon code ?".
Heureusement pour nous, dans le monde des jeux vidéo, l'architecture de la boucle principale est toujours la même :
En réalité, en fonction de la plateforme sur laquelle le jeu est exécuté, certaines parties doivent être ajoutées. Comme la régulation de la fréquence de la boucle principale (pour que le jeu tourne à la même vitesse pour tout le monde). Avec la META, cet aspect est déjà géré grâce à gb.update
qui permet de régler le nombre d'images par seconde désiré. Par défaut, nos jeux seront réglés à 25 images par seconde. Donc en réalité, il y a une zérotième étape dans notre boucle : l'attente de l'autorisation d'afficher une image obtenue grâce à la ligne while(!gb.update());
. D'ailleurs, vous avez déjà utilisé cette méthode dans l'atelier du Pong, sans le savoir !
La première partie consiste à voir ce que le joueur fait: pour Pong c'était le mouvement des raquettes avec les boutons. La seconde est responsable de toute la logique du jeu: dans Pong cela correspondait aux détections de collisions et au déplacement de la balle et on y a ensuite ajouté l'IA. Enfin, pour la troisième et denière partie, nous permet de tout afficher (raquettes, balle et score pour le Pong et le 'briques', le score, ... dans notre jeu).
Cette technique d' "Entrées, Mise à jour, Affichage" est très pratique: elle nous permet tout d'abord de nous y retrouver dans le code, et elle nous force à découpler les entrées, la logique de jeu et l'affichage. Nous reviendrons plus tard sur ces avantages. D'autre part, si nous adoptons tous la même organisation, nous gagnons du temps lors de l'analyse du code d'un programme que nous n'avons pas écrit et nous avons tout intéret à capitaliser sur les parties communes afin d'y perde moins de temps pour nous consacrer aux différences qui renderont notre jeu unique
Commençons par placer des commentaires pour mieux s'y retrouver :
#include <Gamebuino-Meta.h>
void setup() {
gb.begin();
}
void loop() {
while(!gb.update());
// ENTREES //
// MISE A JOUR //
// AFFICHAGE //
gb.display.clear();
}
J'en ai aussi profité pour placer tout ce dont on aura forcément besoin pour notre programme (mais rien de nouveau ici ;) ) On retrouve notre include, la procédure setup() qui contient gb.begin, la procédure loop avec le while(!gb.update()); que nous avons eu plus haut pour calibrer notre jeux à 25 images par seconde, des commentaires pour matérialiser les 3 parties que nous venons d'introduire et gb.display.clear(); pour effacer l'écran avant de réafficher les éléments à leur nouvelle place.
Vous êtes maintenant prêt à passer à l'étape suivante.