Aujourd'hui nous allons voir comment organiser la création du jeu. Je ne vais pas vous donner la solution miracle qui vous permettra de tout faire, et pour être complètement honnête, il est fortement probable que nous devrons revenir sur cette architecture pour l'améliorer et la compléter. On va surtout ici voir la logique de base du déroulement d'un jeu.
Un jeu, c'est un programme informatique comme un autre mais il a une particularité en programmation : une boucle principale. Cette boucle est quasi-infinie, elle s'exécute constamment tout le long du jeu et autant de fois par seconde qu'on a besoin d'images ! En gros si vous souhaitez faire un jeu qui s'affiche en 60 images par seconde, cette boucle s'éxecutera 60 fois par seconde !
C'est donc cette boucle qui se chargera de calculer tout ce qu'il y a à afficher en 2D et 3D puis de dire au moteur : "c'est bon j'ai tout calculé, affiche l'image". Et la boucle recommencera en calculant la scène avec d'autres paramètres (position, rotation, transparence...) et ainsi de suite, 60 fois par seconde !
En gros on fait comme au cinéma, on crée une succession d'images qui vont s'afficher les unes à la suite des autres et donner l'illusion à notre oeil que le tout est animé, sauf que le joueur en utilisant les commandes changera la manière dont notre jeu va créer les images et les retranscrire à l'écran.
Comme nous allons utiliser le C++ et ses fonctionnalités de programmation objet, il est nécessaire que vous compreniez bien le concept. Nous allons créer une multitude de classes qu'on va pouvoir utiliser tout au long du développement du jeu. La logique ici est de partir d'une classe de base, la classe que j'appelerai Game.
C'est la classe "Jeu" qui contiendra tout le reste. Voyez ça comme un appareil, une télévision par exemple. Votre télé, elle est déjà prête à l'emploi, vous n'avez qu'à appuyer sur le bouton pour l'allumer, l'éteindre, quelques autres boutons permettent d'ajuster le volume ou de changer de chaîne. Et bien notre classe Game ça sera pareil, elle contiendra les commandes de base du jeu. C'est donc une classe très basique et avec très peu de fonctionnalités. Voyons un peu...

Nous avons une classe Game avec 3 fonctions :
En réalité, quand vous jouez à un jeu vidéo, vous parcourez des niveaux (ou des maps), mais pas seulement, vous passez par un écran titre, un menu, un sous-écran ou un générique. Tout ça si on réflechit bien, on peut le regrouper sous une même appellation : une scène ! Et oui, un écran titre est une scène, un niveau à parcourir est aussi une scène. La chose à considérer et même importante c'est de noter que dans un jeu, il ne peut y avoir qu'une seule scène à la fois. On est donc certain qu'on pourra intégrer une variable dans Game qui dira dans quelle Scene on se trouve.

Il va de soi que nous créerons une classe Scene, la propriété currentScene de la classe Game fera donc référence à une Scene.

Si on veut être le plus libre possible, une scène peut contenir tout ce qu'on veut : des éléments 2D et 3D ! Et oui, il n'y a pas que les niveaux qui peuvent être en 3D, si on veut on peut créer un écran titre en 3D, il faut donc être assez générique.

On vient de parler d'une liste d'éléments. Ces éléments sont des entités qu'on trouve dans une scène, ils peuvent être en 2D ou en 3D. Si il est en 2D, ça peut être un élément de l'interface, une image 2D, une barre de vie, un viseur... Si il est en 3D, ça peut être le personnage, les ennemis, le décor... Nous allons donc tout regrouper sous une seule et même classe : SceneElement.

On peut donc lier les SceneElement à une Scene en considérant que Scene contiendra une liste de SceneElement. On verra dans la partie suivante comment cela se traduit en C++.

On a une structure vraiment simple d'un jeu, on la détaillera plus tard mais déjà à partir de ça on peut avoir une idée de comment le jeu va être programmé, c'est d'ailleurs l'objet de l'étape suivante du tutorial.