top of page

Structure du programme

 

La structure du programme reprend l’architecture expliquée dans le tuto « Architecture».

 

Le corps de base du programme est toujours le même et on construit toute l’application en rajoutant des fonctions à l’intérieur des fonctions de base déjà existantes.

 

Voici la boucle principale, quelque soit la complexité de votre application le programme peut être structuré suivant ce principe :

Le programme dépile les divers évènements en ligne 301, en fonction du type d’évènements ceux-ci sont traités par le switch (lignes 303 à 323) et par la suite on met à jour le résultat de ces traitements dans la fonction Actualise().

Dans la fonction Actualise() on incrémente aussi une variable qui représente le temps.

En ligne 328 le test de « if(actif) » permet très facilement de mettre le programme en pause : le jeu et le temps sont figés.

Enfin en ligne 329 Affichage(), comme son nom l’indique, permet de faire tous les affichages à l’écran.

Toutes ces fonctions sont appelées périodiquement à chaque tour de cette boucle principale, la fonction gesFrame() en ligne 330 permet de rajouter un délai variable (en fonction des temps d’exécution) pour que cette boucle tourne avec une période FIXE : ici 20ms.

 

Voici le détail du switch() avec une fonction pour chaque type d’évènements :

 

 

 

Pour savoir si le programme a une bonne structure, vérifier ces points :

 

  • Si j’utilise la fonction SDL_PollEvent() : je dois la trouver une seule fois dans tout le code et sous la forme      while ( SDL_PollEvent(&event) )  { …… }

  • Si j’utilise la fonction SDL_PollEvent() : la boucle principale doit comporter un mécanisme de pause et cadencement de trames (optimisation affichage / consommation CPU)

  • J’utilise une seule fois dans tout le code la fonction SDL_Flip ( )

 

 

Organisation en Phases :

 

Un exemple de mauvaise structure est représenté par la figure suivante.

Lorsque le programme comporte plusieurs tableaux ou séquences de jeu, soit donc différentes Phases, on voit souvent un codage des phases les unes après les autres avec une scrutation des évènements au niveau de chaque phase.

On a ainsi plusieurs boucles (une par phase) qui analysent les évènements. C’est à proscrire !

Imaginons que la phase 2 soit un sous-menu et que la sortie ou un évènement particulier doive nous faire revenir en phase 1 : c’est inextricable.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

La solution est d’adopter une seule et unique boucle d’analyse des événements et d’orienter en fonction de la phase avec un switch { … }.

Comme l’affichage peut être différent en fonction des phases : on trouvera aussi un switch { … } dans la fonction Affichage ( ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Le jeu est découpé en différentes phases ou (et) tableaux/niveaux de jeu :

 

 

 

 

 

 

 

La ligne 106 montre les différentes phases, on démarre le jeu avec la phase d’introduction (INTRO).

 

 

Le traitement des diverses fonctions est différent selon les phases de jeu : on trouvera un « switch(phase ) » pour ce faire dans ces fonctions.

Exemple pour la fonction Affichage() :

La fonction Affichage() comprend le SDL_Flip(ecran) unique dans tout le programme.

Les sous-fonctions réalisent les différents blits.

Voici une partie des différents « case » avec pour les 4 niveaux de jeu, les différents affichages, 

du Vaisseau,

des astéroïdes,

des vaisseaux ennemis,

des balles lors des tirs,

des information du jeu :

Et voici la fonction GesFrame() :

Il nous reste à voir la fonction Actualiser() et le programme est complet !

Tout le code prend place à l'intérieur de ces fonctions (souvent sous forme d'autres fonctions).

 

Voici le code intégral pour cette structure :   CODE main()

  Page précédente                                                                                                                           Sommaire                                                                                                                   Page suivante

bottom of page