3

作为一个爱好项目,我目前正在尝试创建一个基于浏览器的小型游戏——我认为使用 MVC 模式对其进行编码是“正确的事情”,将游戏的“引擎”与演示分开。这将是一个简单的“rpg”游戏,玩家的角色在世界各地与怪物战斗并收集物品。

我的问题是我被引擎的结构卡住了。在当前的设计中,大部分引擎都以“玩家角色”对象为主——有诸如位置、怪物或物品之类的东西,但它是一个角色,它完成了大部分动作:旅行、攻击、购买物品等。知道可能还有其他方法可以设计这种引擎,但不知何故我无法弄清楚,所以我在这里寻求一些提示或建议。

哦,服务器后端将是 php+mysql,如果这很重要的话。

4

3 回答 3

4

“但它是一个做大部分动作的角色:”

对,但是...

首先,将人类用户(“玩家”)与其角色分开。角色不是玩家。

您有大量对象。地点、被动事物、主动事物(怪物)和角色。他们都相互影响。

你必须完全隔离责任。角色不主宰,角色只是参与。

如果您将每个可能的人类玩家动作定义为Command ,您会发现它更令人愉快。Command的每个子类都可以更改模型的状态。东西移动,怪物移动,角色移动(角色,而不是玩家。)

捡起或放下东西都是Command的一个子类,可以将东西从一个角色移动到另一个位置或从一个位置移动到另一个角色。玩家发出命令;该命令更新位置、项目和字符。

角色是被动的。事情大多是被动的。位置大多是被动的。Command 对象具有更新模型中所有不同事物之间的状态和关联的算法。

如果您想更进一步,每个命令都可以是具有撤消功能和执行功能的备忘录。那么游戏的历史就是这些纪念品的历史。

于 2008-11-03T00:13:38.107 回答
0

我对你的问题有点困惑。

MVC 是一个独立于游戏引擎设计的模式——无论底层引擎结构是什么样子,你仍然需要一个 MVC 模式——用户将与提交回控件的视图交互。在您的情况下,“M”可能是当前游戏状态的一个非常复杂的模型。

我会从纯粹的数据驱动的角度来考虑这个问题。发生的一切最终都是对 Character 模型的操作。

于 2008-11-03T00:14:25.843 回答
0

角色是模型的一部分,但该角色是抽象的——它只是服务器上的一个对象或数据结构。我使用 MVC 来保持诚实的一种技术是有一种方法可以在没有图形视图和控制器的情况下驱动模型。对于基于 Web 的应用程序,您可以通过文本 GET 请求或 XMLRPC 等驱动它。

于 2008-11-03T01:36:10.733 回答