Когда я думаю о структуре объекта, я думаю о своих методах как о выполнении одной из двух вещей:
1) задаю «объекту» вопрос
2) командую «объектом»сделать что-то
При этом мне не имеет смысла спрашивать «доску», каков следующий лучший ход.Доска должна просто содержать значения и сообщать вам о своем состоянии.
Возможно, у меня есть объект, предназначенный для определения лучшего следующего хода для данного «интеллекта».Давайте назовем это «move_brain».Тогда вы можете сказать: «Эй, move_brain, учитывая эту доску и этот уровень интеллекта, какой следующий лучший ход?»
Класс доски, как вы обрисовали его, теперь имеет много обязанностей: удержание состояния, позволяя пользователямдвигаться и думать о том, как двигаться дальше.Это слишком большая ответственность.
И после всего этого я бы сказал так: учитывая, что эта программа не настолько массивна, почти любое решение будет в порядке.
Удачи!