Як приклад, ось як структурований мій поточний негідний проект (на Java). Він використовує 2D графічний двигун, тому багато коду візуалізації вже подбали про мене. Критика вітається.
class Game
Цей клас встановлює державну машину, яка керує поточним станом гри. (у меню проти початку нової гри проти гри в збережену гру)
interface State
Кожен клас State містить дві петлі: цикл для оновлення логіки та цикл для візуалізації. Вони також містять код для виклику Game
класу та запиту на зміну в інший стан.
class ResourceManager
Синглтон, який ініціалізується Game
класом, який завантажує всі необхідні ресурси та дозволяє отримати доступ до них. Мені не подобається ця конструкція, тому що важко завантажувати / вивантажувати ресурси, наприклад, на різних рівнях. Я б, мабуть, спроектував це по-іншому, якби я починав із початку.
class Map
Карта містить масив плиток та список усіх істот та предметів на карті. Це досить базовий клас.
class Creature
Істоти містять інформацію про себе, включаючи обчислення руху (вимагаючи, щоб вони знали, на якій карті вони перебувають, і мати можливість запитувати її, щоб дізнатися про перешкоди). Вирішувати, чи потрібно це робити, чи мати якийсь клас керівника, щоб подбати про це для всіх істот - це те, з чим я борюся.
interface AITask
Істоти можуть мати список AITasks, які виконуються щоразу, коли запускається логічний цикл істоти. У AITask є свій логічний цикл, який видає команди створенню, і умова припинення, яка визначає, чи було завдання виконано успішно чи ні.
interface UIElement
Я реалізував власний інтерфейс для цього двигуна. Кожен UIElement має цикл візуалізації та логічний цикл. Вони також мають цикл для обробки вводу клавіатури / миші. Усі елементи можуть мати ряд дочірніх елементів, які надаються після їх батьків, і приймають клавіатуру / мишу. Це дозволяє, наприклад, мати меню з підменю.