作为一个爱好项目,我目前正在尝试创建一个基于浏览器的小游戏 - 我认为使用MVC模式对其进行编码是“正确的事”,将游戏的“引擎”与演示分开。这将是一个简单的“RPG”游戏,玩家的角色在世界各地与怪物搏斗并收集物品。
我的问题是我被发动机的结构困住了。在目前的设计中,大多数引擎都由“玩家的角色”对象控制 - 有位置,怪物或物品等东西,但它是一个完成大部分动作的角色:旅行,攻击,购买物品等。知道有可能有其他方法来设计这样的引擎,但不知何故我无法弄清楚,所以我在这里要求一些提示或建议。
哦,服务器后端将是php + mysql,如果这在任何方面都很重要。
答案 0 :(得分:5)
“但这是一个完成大部分行动的角色:”
是的,但是......
首先,将人类用户(“玩家”)与他们的角色分开。角色不是玩家。
你有大量的物品。地点,被动的东西,活跃的东西(怪物)和角色。他们都互相交流。
你必须完全孤立责任。角色不占主导地位,角色只是参与其中。
如果您将每个可能的人机操作定义为命令,您会发现它更令人愉快。 命令的每个子类都可以更改模型的状态。事情发生了变化,怪物移动,角色移动(角色,而不是玩家。)
拾取或放下它们都是命令的子类,它将一个东西从一个角色移动到另一个位置或从一个角色移动到另一个角色。玩家发出命令;该命令更新位置,项目和字符。
角色是被动的。事情大多是被动的。地点大多是被动的。 Command对象具有更新模型中所有各种事物之间的状态和关联的算法。
如果您想更进一步,每个命令都可以是 Memento ,具有撤消功能和执行功能。然后游戏的历史就是这些 Mementos 的历史。
答案 1 :(得分:0)
我对你的问题有点困惑。
MVC是与游戏引擎设计不同的模式 - 无论底层引擎结构如何,您仍然需要MVC模式 - 用户将与提交回Control的Views进行交互。在你的情况下,“M”可能是当前游戏状态的一个非常复杂的模型。
我首先从纯数据驱动的角度考虑这个问题。发生的一切最终都是对角色模型的操作。
答案 2 :(得分:0)
字符是模型的一部分,但该字符是抽象的 - 它只是服务器上的对象或数据结构。我用一种技术让自己保持诚实w.r.t. MVC有一种在没有图形视图和控制器的情况下驱动模型的方法。对于基于Web的应用程序,您可以通过文本GET请求或通过XMLRPC等来驱动它。