When I think about the structure of an object, I think of my methods as one of two things:
1) by asking the question "object"
2), the commander of the "object" to do something
Saying this, it makes no sense for me to ask “advice” what the next best move is. The board should just store the values and tell you about its status.
I probably would have an object dedicated to determining the best next step for a given "intelligence". Let me call it "move_brain". Then you can say: "Hey, stirring, given this board and this level of intelligence, what is the next best move?"
The board class, as you described, now has many responsibilities: maintaining state, allowing users to move, and think about how to move on. This is too much responsibility.
And after all this, I would say this: given that this program is not so massive, almost any solution will be fine.
Good luck
source share