Основной задачей графического интерфейса пользователя является обработка событий. Пользователь делает X и вам нужно отвечать или не отвечать на него. Игры имеют дополнительную сложность в том, что они должны изменить состояние в режиме реального времени. Во многих случаях это происходит путем преобразования текущего состояния в новое состояние и указания пользовательскому интерфейсу для отображения результатов. Это происходит за очень короткое время.
Вы начинаете с модели. Коллекция классов, представляющая данные, которыми пользователь хочет манипулировать. Это может представлять собой отчеты о бизнесе или обширных границах неизвестного мира.
Интерфейс пользователя начинается с определения последовательности форм или экранов. Идея состоит в том, что для каждой формы или экрана вы создаете интерфейс, который определяет, как контроллер UI будет взаимодействовать с ним. В общем, для каждой формы или экрана существует один класс UI Controller.
Форма передает событие в контроллер пользовательского интерфейса. Затем контроллер пользовательского интерфейса решает, какую команду выполнить. Лучше всего это сделать с помощью шаблона проектирования команд, где каждая команда является собственным классом.
Затем команда выполняется и манипулирует моделью. Затем команда сообщает контроллеру пользовательского интерфейса, что экран или часть экрана должны быть перерисованы. Затем элемент управления пользовательского интерфейса просматривает данные в модели и использует экранный интерфейс для перерисовки экрана.
Поместив все формы и экран за интерфейсом, вы можете вырвать то, что у вас есть, и вставить что-то другое. Это включает в себя даже не наличие каких-либо форм, а скорее поддельные объекты. Это хорошо для автоматического тестирования. Пока что-то правильно реализует интерфейс экрана, остальная часть программного обеспечения будет счастлива.
Наконец, игра, которая должна работать в режиме реального времени, будет иметь запущенный цикл (или циклы), который будет непрерывно преобразовывать состояние игры. Он будет использовать контроллер пользовательского интерфейса, чтобы перерисовать то, что он обновил. Команды будут вставлять или изменять информацию в модели. В следующий раз, когда появится цикл, будет использована новая информация. Например, изменение вектора объекта, путешествующего по воздуху.
Мне не нравится архитектура MVC, так как я чувствую, что она плохо справляется с проблемами GUI. Я предпочитаю использовать Контролирующий контроллер, который вы можете прочитать о здесь . Причина в том, что я считаю, что автоматизированные тесты являются одним из наиболее важных инструментов, которые у вас есть. Чем больше вы можете автоматизировать, тем лучше для вас. Наблюдающий шаблон презентатора делает формы тонкой оболочкой, поэтому очень мало того, что не может быть проверено автоматически.