В проекте используется архитектура, основанная на паттерне MVC — Model, View, Controller. Однако взаимодействие компонентов организовано через центральный контроллер, то есть используется MVP (Model-View-Presenter).
Model отвечает за игровую логику и состояние игры. В ней находится игровое поле, фигуры, проверка столкновений, движение фигур, удаление заполненных линий и другие правила игры. При этом Model не зависит от графической части программы и не взаимодействует напрямую с View.
View отвечает только за визуальное отображение игры с использованием библиотеки SFML. Она не содержит основную игровую логику.
Центральным компонентом является Controller. Он организует работу программы и координирует взаимодействие между Model и View.
Controller обрабатывает действия пользователя, передаёт соответствующие команды модели, управляет обновлением игры и вызывает представление для отображения текущего состояния.
Таким образом, взаимодействие компонентов можно представить следующим образом: Пользователь → Controller → Model, Controller → View.
Такой подход позволяет разделить игровую логику, отображение и управление, при этом Model и View остаются независимыми друг от друга.