Прототип игры ZigZag.
Хочу обратить внимание, что я обошелся без использования синглтонов, сервис-локаторов, явных статичных объектов и DI-фреймоворков. Я использовал расширенную версию шаблона "Подписчик/издатель" (PubSub) или по-другому: глобальный менеджер событий.
Данный менеджер спрятан в базовых классах (PubSubMonobeh и PubSubEntity) и обычно вызывается только через методы подписки/публикации событий. В паре с шаблоном "сервис-локатор" данный подход позволяет без проблем создавать и развивать достаточно крупные проекты. Легко решаются вопросы с обменном данными/событиями между UI слоем и слоем бизнес-логики (или любым другим).
В этом проекте передавать данные в событиях не потребовалось, поэтому классы PubSub могут выглядеть перегруженными функционалом.