Прежде всего, вы должны концептуально отделить вещи, связанные с графическим представлением и анимацией, от базовой логики игры. Мой ответ на этот вопрос , вероятно, имеет отношение к вашей ситуации.
В нардах и других настольных играх фигуры пассивны и не имеют состояния, кроме позиции, и должны быть очень простыми. Например, в шахматах было бы целесообразно поместить проверочный код (проверка правильности хода) в различные классы фигур (король, пешка ...). Логика в нардах намного проще, поэтому, вероятно, это можно сделать одним центральным методом.
Мое первое, что я мог бы сделать: объект игрового менеджера отслеживает движение, когда пользователь тащит кусок вокруг. Когда фигура входит в определенный треугольник, менеджер вызывает метод (сам по себе), чтобы проверить, является ли движение допустимым, и отображает, например, красную или зеленую рамку. Когда пользователь отпускает фигуру в правильном треугольнике, менеджер говорит доске обновить себя. Возможно, объект board не должен быть больше массива.
Обратите внимание, что здесь существует постоянное взаимодействие между логическим кодом и графическим кодом. Когда часть перетаскивается, вы должны графически проверить, находится ли она внутри треугольника или в области, окружающей треугольник. Затем вы должны выяснить, какому объекту (или просто индексировать в массив) в игровой логике это соответствует, чтобы выполнить проверку.
Замечательно сделать относительно простой проект, подобный этому, чтобы научиться разделять код на части и как не смешивать логику с представлением.