Я создаю класс страны, который содержит группу городов?
Конечно.
Есть ли в городах много строительного класса, в большинстве есть классы людей?
Конечно.
Я делаю класс поиска пути, к которому игрок может получить доступ?
Конечно.
Все, что вы предложили выше, кажется разумным. Это может быть не лучшим способом для вас в долгосрочной перспективе, но это нормально. Это, очевидно, имеет смысл для вас, поскольку именно организационная модель впервые пришла к вам. Важно, что вы берете это и начинаете реализацию с этого. Это поможет вам начать работу, преодолеет этот первоначальный «паралич дизайна», который часто мучает разработчиков в начале задачи, и (если он окажется ошибочным в некотором роде) научит вас кое-чему о плюсах и минусах этого конкретного подхода к дизайну.
Вы, естественно, взяли концепции в своей голове и сгруппировали их в код согласно некоторым простым правилам:
- Отличается ли эта концепция в поведении или данных от других объектов, которые у меня уже есть? (Страны и люди имеют очень мало, если таковые имеются, значимых данных или поведения, поэтому они должны быть представлены различными типами в игре).
- Нужно ли мне даже манипулировать этой концепцией в коде значительным образом (если ваша игра имеет дело с отдельными людьми, вам может понадобиться этот
Person
класс, но если игра заботится только о них в совокупности, как в более ранних версиях SimCity, вы может не нуждаться в этом типе, ни в экземплярах этого типа для создания картографии 1: 1 населения города ( int populationCount
может быть достаточно).
- Требует ли эта концепция государства ? Если это так, он должен быть как-то инкапсулирован, что позволяет мне хранить это состояние (класс), а не набор свободных функций. (Реализация поиска пути не имеет аналогичного объекта реального мира, но она требует отслеживания данных, например, какие узлы на карте уже рассмотрены, и это лучше сделать с помощью класса, чем хранить его в связке скрытых глобалов и создания автономных функций).
Несмотря на простоту, ответы на эти вопросы могут принести вам большую пользу, когда вы решаете, следует ли преобразовывать ментальную концепцию в исходный код. Вы также можете прочитать о принципах SOLID объектно-ориентированного проектирования.
Обратите внимание, что предложение системы сущностей / компонентов, сделанное в комментариях, также является допустимым подходом, хотя я бы отказался от него здесь, если вы не измените масштаб своего проекта на меньший (просто потому, что принятие двух новых больших задач в одном проекте может быть слишком пугающим и может ослабить образовательную выгоду, которую вы иначе получили бы, сосредоточившись только на одной). В компонентно-ориентированной модели «тип» в приведенных выше вопросах становится более неявным: не конкретный тип в коде, а неявный тип, определяемый набором компонентов, образующих сущность. Могут применяться те же руководящие принципы.