Le premier point important à souligner est qu'il n'y a pas de «bonne» réponse à cette question.
La chose la plus proche d'une bonne réponse serait quelque chose comme: cela dépend beaucoup du type de jeu, de la plate-forme cible, des contraintes (temps) etc.
Cela dit, il existe de très bons articles qui vous montreront comment d'autres personnes ont essayé de répondre à ce problème (comme j'ai essayé de trouver des informations à ce sujet dans le passé).
Comme The Canard communiste l'a mentionné, l' article sur l' ingénierie des développeurs de jeux m'a aidé à comprendre certaines parties de l'architecture des jeux.
Ma conception actuelle est un hybride de Quake3 / Doom3 et un peu de la bibliothèque de classes .NET :)
J'ai deux bibliothèques (statique ou dynamique dépend de la façon dont vous voulez construire / livrer) le Framework
et le Library
.
La bibliothèque contient toutes les classes d'assistance qui sont là pour aider à la production de logiciels de jeu, mais ne se limitent pas à ce type de produit. c'est-à-dire qu'il a une implémentation d'une liste chaînée qui est optimisée pour le code du jeu mais pourrait être utilisée par tout ce qui a besoin du service d'une liste chaînée.
Le Framework est le courage du «moteur» si vous voulez l'appeler ainsi. Beaucoup de ceci suit les philosophies de conception de Quake3 (juste d'une manière plus orientée objet). Il contient la CLI , la gestion du temps, le code spécifique au système d'exploitation, et éventuellement les couches réseau, etc.
Ces deux sont ensuite liés à l'application réelle en cours de production. Le Game
si vous le souhaitez, qui contient le code spécifique au jeu. De la même manière, Quake3 charge les DLL en fonction du «mod» en cours de lecture.
Pour vous donner une idée de la structure, voici une ventilation rapide des dossiers et du contenu de chaque bibliothèque:
- Cadre
- IO (classes de gestion de fichiers spécialisées, classes d'impression de texte (par exemple vers la CLI), et journalisation, etc.)
- Réseau
- Client (classes qui représentent ce que le Framework considère comme une «personne jouant / connectée au jeu»)
- Serveur (classes pour gérer la connexion au framework et gérer le (s) joueur (s))
- Plateforme (clavier / souris / contrôleurs gérant des classes, routines spécifiques au système d'exploitation comme getTime ())
- Système (classes de très bas niveau comme une classe d'erreur pour faciliter l'impression des messages d'erreur, les classes de synchronisation et la CLI elle-même.)
- Rendu (auto-explicatif)
- etc.
- Bibliothèque
- Collections (classes qui représentent des collections de données, listes / tables de hachage liées, etc.)
- Math (classes d'aide de base en mathématiques comme les vecteurs et les matrices)
- etc.
HTH! Devrait vous donner quelques conseils ...