Ваш вопрос действительно сводится к тому, «Как я могу отслеживать состояние игры».Обычно это делается с помощью конечных автоматов.Думайте о состоянии как о моменте времени для пользователя.Например, когда игра запускается впервые, у вас может быть доска с фигурами и ничего не выбрано.Это может быть состояние 1.
1
Теперь подумайте о переходах, которые пользователь может сделать из этого состояния.Переход может быть приближен к взаимодействию с пользователем.Возможно, состояние 1 имеет только один переход, игрок выбирает фигуру.
1 -> (Player selects a piece)
Это приводит нас ко второму состоянию, выбранные фигуры.
1 --> (Player selects a piece) --> 2
Теперь может быть 2 перехода изсостояние 2. Первым будет отмена выбора пользователем (упрощение).Во-вторых, пользователь выберет верный ход (давайте проигнорируем недопустимый аргумент).
1 --> (Player selects a piece) --> 2 --> (player de-selects piece)
\-> (Player selects valid move)
Теперь подумайте, куда вас приведет первый переход.Если не было никакого движения, мы вернулись в квадрат 1 или в состояние 1 на диаграмме :) Если фигура действительно была перемещена, мы, вероятно, перейдем в состояние, в котором мы анимируем движение, предотвращающее ввод, прежде чем мы перейдем обратно в состояние 1.
1 --> (Player selects a piece) --> 2 --> (player de-selects piece) --> 1
\-> (Player selects valid move) --> 3 [animate] -->1
После того, как вы продумали эти переходы, вы можете реализовать этот механизм состояния несколькими способами.Самым быстрым и грязным, вероятно, будет Enum состояний с механизмом установки и получения текущего состояния в вашем основном игровом классе.Затем в таких методах, как ваш метод onClick, при поступлении щелчка вы проверяете, в каком состоянии вы находитесь, прежде чем разрешить щелчок.В нашем примере щелчок по фигуре в состоянии 1 выберет ее, но в состоянии 2 тот же самый щелчок попытается переместить фигуру в этот квадрат.Действия пользователя имеют различное значение в зависимости от состояния игры.