我用 python 编写了一个简单的推箱子之类的 2D 游戏,我想清理它。它是以一种面向对象的方式完成的,游戏中的每个对象都有一个 Draw 函数,我可以调用它来重绘屏幕。它的效果很好,因为我可以循环遍历屏幕上的每个位置并调用对象的绘制函数。
我正在学习设计模式,我真的很喜欢 MVC 的好处,但我没有看到一种干净的方法来将每个对象具有的绘制函数与模型分开以放入 View 中。有没有好的方法可以做到这一点?在这种情况下我不应该使用 MVC 设计吗?
最佳答案
MVC 有时可能违反直觉,尤其是当您第一次学习 OO 并发现使用“绘制”方法使事情变得如此有组织时!
以下概述了您可以为游戏实现 MVC 的多种方法之一:
型号:
- “盒子”:box_type、pos_x、pos_y
- “BoxManager”:列表(Box)
- “游戏状态”:box_manager、player_manager、goal_manager、...
- “移动”:dx、dy
Controller :
- “游戏 Controller ”:check_valid_move(move)、move_player(move)、is_goal_state()、...
查看:
- “屏幕”:render()
- “PlayerRenderer”:render()
- “BoxRenderer”:render_box(box)、render_all_boxes()
请注意该模型是如何完全独立的并且不引用 Controller 或 View 模块。这是 MVC 的关键方面之一。 Controller 接受玩家输入并操纵全局游戏状态。 View 查看全局游戏状态并渲染屏幕。
您不必走这条路,但这是一个值得理解和考虑的选择。
关于python - 带有对象的 MVC 游戏设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462967/