MVC Game Design with objects
MVC can be counter-intuitive sometimes, especially when you're first learning OO and discover that having a "draw" method makes things so organized!
Here's an overview of one of many ways you might implement MVC for your game:
Model:

"Box": box_type, pos_x, pos_y
"BoxManager": list(Box)
"GameState": box_manager, player_manager, goal_manager, ...
"Move": dx, dy

Controller:

"GameController": check_valid_move(move), move_player(move), is_goal_state(), ...

View:

"Screen": render()
"PlayerRenderer": render()
"BoxRenderer": render_box(box), render_all_boxes()

Notice how the model is totally self-contained and does not reference the controller or view modules.  This is one of the key aspects of MVC.
The controller takes player input and manipulates the global game state.
And the view looks at the global game state and renders the screen.
You don't have to go this route, but it's an option worth understanding and considering.
I wrote a simple sokoban like 2D game in python that I want to clean up.  It's done in a sort-of OO way where each object in the game has a Draw function I can call to redraw the screen.  It works out nicely since I can loop through each position on the screen and call the object's draw function.
I am learning about design patterns, and I really like the benefits of MVC, but I don't see a clean way to separate the draw function each object has from the model to put into the view.  Is there a good way to do this?  Is this a case where I should not use a MVC design?