Какие паттерны или какой подход лучше всего использовать в данной задаче?
Реализцаия IoC(Инверсия управления) через Dependency Injection.
Опишите логику игры скрыв все компоненты которые должны быть нестабильными/гибкими (см. Stable Abstractions Principle) за абстракциями(интерфейсами/абстрактными классами).
Все что вам нужно - отсутствие любых прямых зависимостей от реализации UI(пользовательского интерфейса) и, желательно, устройств ввода.
Я думаю, вам требуется создать иммитационную модель реального времени, причем:
- с публичными свойствами как координаты./жизни...
- каждый такт проверять входные параметры управления (нажата кнопки, положение мыши) 
- такт запускается из вне