The way you describe the problem reveals that you are overloading the class Game
with logic that should belong in other objects.
The first signal appears when you say that other objects "have mostly getters and setters". That means that those objects are just data structures holding state but lacking interesting behavior. This indicates that you still have to think deeper on how you distribute responsibilities among objects.
The second evidence is in the second paragraph of your question. It suggests poor separation between model and GUI. A good test to verify whether there is adequate separation (or not) is to prove that you could play the Game
(at least non-trivial parts of it) from a script, i.e., without exercising any GUI code. The game model will only be properly designed if it is full functional in "headless" mode.
Finally, getting rid of the Game
class would be a bad decision because your model would not have any representation of an entity that exists in the "reality" you are trying to model.
I think that the Game
-centric design you describe reflects your way of looking at the domain. If you only see "the game" you will model just that. However, games are usually rich simulations full of interesting objects whose behaviors go far beyond their interactions with the player. I would therefore recommend more thinking on the other objects, what they know, what tasks could they carry on, how would they collaborate with others, etc. In other words, do not program the game, program its actors, elements, rules, stages, strategies, characters, etc. Do not underestimate any entities either; all of them have something interesting to add to the whole, even a single tile in the chess board has something to contribute to the small universe you are creating. Not something that anybody else could provide, something that no other object could provide with economy of code and elegance.