Важной частью игрового дизайна, подобного этому, является обеспечение того, чтобы вы заложили большую часть логики в модель данных для игры, а не в контроллеры представлений или представления. Модель данных должна отслеживать, где находятся объекты в игровом пространстве, какие логические и визуальные атрибуты они должны иметь и взаимодействуют ли они с другими игровыми объектами.
Функцией контроллера представления должно быть просто преобразование логики каждого объекта в представление. Единственная функция представления должна заключаться в том, чтобы тупо рисовать все, что ему говорит контроллер.
Например: предположим, у вас есть простая игра с двумя шарами, которые отскакивают от стен или друг от друга. Когда они сталкиваются с другим шаром, они меняют цвет. Каждый шар и каждая стена будут представлены отдельным объектом в модели данных. Каждый объект будет отвечать за моделирование состояния шара / стенки в любой момент времени и определение его положения и того, столкнулся он или нет.
Другими словами, модель данных должна обрабатывать все об игре, кроме фактического отображения. В принципе, модель данных должна быть полностью независимой от какого-либо конкретного дисплея. Вы должны быть в состоянии играть в игру с помощью стандартного представления, веб-просмотра или даже командной строки.
Роль контроллера вида заключается в переводе логического положения и логического состояния игрового объекта в подпредставление на игровом экране. Например. используя UIImageView для отображения изображения шара. Контроллер вида просто говорит виду нарисовать шар в определенном месте на экране, используя определенную графику. Вот и все. Когда модель данных меняется, контроллер представления меняет то, что нарисовано, но не помнит, что он нарисовал в прошлый раз, и что и где он рисовал что-нибудь дальше. Это просто отражение модели данных.
Чтобы обработать пользовательский ввод, выполняется обратный процесс, преобразующий изменения пользовательского интерфейса во входные данные для модели данных. Однако контроллер представления не рассчитывает результаты или последствия этих входных данных. Это работа модели данных.
Помещая всю сложную логику игры в модель данных, вы облегчаете смену пар «вид-контроллер / вид» и добавляете, удаляете или изменяете множество различных видов. Например, у вас может быть одна и та же игра на iPhone, iPad и Mac. Большая часть кода будет одинаковой на всех трех платформах, но каждая из них будет иметь собственные пары view-controller / view.
Model-View-Controller очень важен и становится все более важным по мере увеличения сложности приложения. Очень легко втиснуть много данных и логики в контроллеры или представления, которые перегружают их и создают путаницу взаимосвязей, когда вы пытаетесь расширить приложение. Сначала напишите модель данных. Сделайте модель данных способной играть всю игру, используя только текстовый ввод. Тогда и только тогда прикрепите графический интерфейс. Если вы будете следовать этой схеме, написание графических элементов окажется очень простым и очень гибким.