Решил сделать простую игру.
MVC для приложений, для игр оно не применимо так как у вас UI и предметная область слишком уж сильно связаны друг с другом, а MVC ставит перед собой цель именно "развязать" их. Конфликт идет уже в фразе:
Модель хранит в себе спрайт.
Модель должна хранить данные, то есть это симуляции каких-то процессов, ИИ, физика и т.д. Ну а спрайты - это по сути представление данных. И как вы могли заметить игра без графики - не игра и не имеет смысла. А вот сменить UI у приложения можно, на бизнес логику оно не влияет.
Короче для игрушек обычно применяют чуть другой паттерн, под названием
ECS (Entity-Component-system), которы позволяет разделить обязанности чуть-чуть подругому.
p.s. но если вернуться к MVC - то третий вариант. А что до
Но за хранение состояний должна отвечать модель.
Модель отвечает не столько за хранение состояния, сколько вообще за обработку оного. Ну то есть внешний мир о внутреннем состоянии ничего не знает, но это не значит что внешний мир не может попросить кусочек состояния для себя и потом его хранить. View так же может хранить состояние связанное с view и не влияющее ни на что другое.