As an example, here's how my current roguelike project is structured (in Java). It is using a 2D graphics engine so a lot of the rendering code was already taken care of for me. Criticism is welcomed.
class Game
This class sets up the state machine that manages the current state of the game. (in a menu vs. starting a new game vs. playing a saved game)
interface State
Each State class contains two loops: a loop for updating the logic and a loop for rendering. They also contain code for calling the Game
class and requesting a change to a different state.
class ResourceManager
Ein Singleton, der von der Game
Klasse initialisiert wird, die alle benötigten Ressourcen lädt und den Zugriff darauf ermöglicht. Ich mag dieses Design nicht, weil es zum Beispiel schwierig ist, Ressourcen auf verschiedenen Ebenen zu laden / entladen. Ich würde das wahrscheinlich anders gestalten, wenn ich von vorne anfangen würde.
class Map
Eine Karte enthält eine Reihe von Kacheln und eine Liste aller Kreaturen und Gegenstände auf der Karte. Es ist eine ziemlich einfache Klasse.
class Creature
Kreaturen enthalten Informationen über sich selbst, einschließlich Bewegungsberechnungen (sie müssen wissen, auf welcher Karte sie sich befinden, und sie müssen diese abfragen können, um Hindernisse zu erkennen). Es ist etwas, mit dem ich zu kämpfen habe, um zu entscheiden, ob ich das mache oder ob ich mich um eine Art Manager-Klasse für alle Kreaturen kümmern soll.
interface AITask
Creatures can have a list of AITasks, which are executed every time the creature's logic loop is run. The AITask has its own logic loop that issues commands to the creature, and a termination condition that determines if the task was completed successfully or not.
interface UIElement
I implemented my own UI for this engine. Each UIElement has a rendering loop and a logic loop. They also have a loop for processing keyboard/mouse input. All elements can have a number of child elements, which are rendered after their parents, and take over the keyboard/mouse input. This lets you have menus with submenus, for example.