Quel langage déjà
Si tu cites Visual Studio je suppose que tu parles du C++ ?
Je peux te donner la structure de mon jeu, je sais pas si elle est super, c'est mon premier vrai jeu
- Animation : Gère toutes les animations
- AnimationGroup : Sous ensemble d'une animation
- Animation : Contient plusieurs AnimationGroups
- Animator : Contient un ensemble d'Animations
- DirtyAnimation : Animation seule pour objet simple
- Caster : Gestionnaire des sorts / mana / cooldown
- Character : Personnage (Hérite de Entity)
- Collisions : Gestion des collisions (BoundingBox / CircleTest / PixelPerfect)
- Console : Console de débug
- ConsoleMessage : Message affiché dans la console
- Console : Classe principale de la Console
- Stream : Point d'accès pour la console à différentes parties du programme
- Cursor : Curseur du jeu
- DataParser : Parseur de fichier (Avec une syntaxe propre à mon jeu)
- Decoration : Tous les éléments du décor en jeu
- Dialog : Texte affiché en jeu
- Enemies : Hérite de Entity
- Entity : Base de toute entité
- Game : Le jeu en lui même (Boucle principale)
- GUI : Toute l'interface graphique
- HUD : Tout l'overlay (Barre de vie / mana, Sorts / Cooldown etc..)
- KeyBind : Gestionnaire de l'appui de touches
- MapEditor (Boucle principale d'édition de map)
- MeltingSaga (Fichier lancé au démarrage du jeu qui peut lancer Game ou MapEditor)
- Particle (Système de Particules)
- resource (Interne à Visual Studio, pour ajouter une icône au programme etc..)
- Shapes (Formes des collisions)
- Spells (Les sorts)
- UsefulFunc (Plein de fonctions utiles manquantes à C++)
- Water (L'eau)
- World (Gestionnaire de la map)
----------------------------------------------------------------------
Ici tout s'embrique à peu près bien.
Lorsqu'on lance le jeu, main() de MeltingSaga appelle la fonction startGame() contenue dans Game.
Game crée un objet World() qui contient des Shapes() pour les collisions et les Decorations() ainsi que le Character() qui hérite de Entity(). Une Console() est également déployée et attache différents Stream() à certains points du programme (Le Character(), le World() etc..), un Caster() est également crée et attaché au Character() et charge tous les Spells() disponibles, le Caster() s'attache aussi au Cursor(). Pour charger la map, World() utilise DataParser() pour lire le fichier de map. Le HUD() s'attache au Character() et au Caster() pour gérer l'overlay. La boucle principale utilise également la GUI() pour l'interface et tout ce beau monde utilise les fonctions disponibles dans UsefulFunc.
C'est un résumé un peu bref et bordélique mais en gros c'est comme ça que ça se passe.