python - 带有对象的 MVC 游戏设计

标签 python model-view-controller oop

我用 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/

相关文章:

python - 与 Python2 相比,Python3 中的相同代码速度较慢

c# - lambda 条件不起作用

c# - 如何将值传递给构造函数?

c# - 在 C# 中实现多于一种类型对象的堆栈的最佳方法是什么?

java - 在 Android 上共享 Realm 字段

python - 如何在python 3中获取JSON的纬度和经度字段特定值?

python - Django 管理员登录屏幕上出现错误

c++ - 如何导出 std::vector

java - 什么是有用的抽象/契约来协助 Builder 模式构建 MVC UI?

Java:MVC 项目中的错误处理。如何正确实现?