2008-11-02 38 views
3

作为一个业余爱好项目,我正在尝试创建一个基于浏览器的小型游戏 - 我认为使用MVC模式编码它是“正确的事情”,将游戏的“引擎”与演示分开。这将是一个简单的“RPG”游戏,玩家的角色徘徊在与怪物战斗并收集物品的世界。我应该使用什么模式进行基于浏览器的游戏?

我的问题是我陷入了发动机的结构。在目前的设计中,大多数引擎都由“玩家的角色”对象支配 - 有位置,怪物或物品等物品,但它是一个角色,可以执行大部分行动:旅行,攻击,购买物品等。知道有可能设计这种引擎的其他方式,但不知何故,我无法弄清楚,所以我在这里要求一些提示或建议。

哦,服务器后端将是php + mysql,如果这在任何方面很重要。

回答

5

“但它是一个字符,完成大部分的行动:”

是的,但是......

首先,分开他们的性格人类用户(“玩家”)。角色不是玩家。

您有大量的对象。地点,被动的东西,活跃的东西(怪物)和角色。他们都互相交流。

你必须完全分离责任。角色不主宰,角色仅仅参与。

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

拾取东西或放下它们都是命令的子类,它将字符移动到位置或位置。玩家发出命令;该命令更新位置,项目和角色。

该字符是被动的。事情大多是被动的。地点大多是被动的。 Command对象具有更新模型中所有各种事物之间的状态和关联的算法。

如果你想更进一步携带这一点,每个命令可以是备忘录与撤消能力以及一个做能力。那么这款游戏的历史就是这些历史纪念品

+0

我从播放器中分离字符,主要是因为我想允许多个字符 - 但我没有想过要走这么远,所以谢谢你的建议。 – 2008-11-11 17:47:33

0

我对你的问题有点困惑。

MVC是一个独立于你的游戏引擎设计模式 - 无论底层引擎结构如何,你仍然需要一个MVC模式 - 用户将与Views交互,并将视图提交给Control。在你的情况下,“M”可能是当前游戏状态的一个相当复杂的模型。

我会从纯数据驱动的角度思考这件事。发生的所有事情最终都是在Character模型上进行的操作。

0

该字符是模型的一部分,但该字符是抽象的 - 它只是服务器上的对象或数据结构。我用一种方法让自己保持诚实w.r.t. MVC可以在没有图形视图和控制器的情况下驱动模型。对于基于网络的应用程序,您可以通过文本GET请求或通过XMLRPC等驱动它。

相关问题