<分区>
作为一个业余爱好项目,我目前正在尝试创建一个基于浏览器的小型游戏 - 我认为使用 MVC 模式对其进行编码是“正确的做法”,将游戏的“引擎”与表示分离。这将是一个简单的“rpg”游戏,玩家的角色在世界各地游荡,与怪物战斗并收集元素。
我的问题是我被引擎的结构卡住了。在目前的设计中,大部分引擎都是由“玩家的角色”对象主导的——有诸如位置、怪物或元素之类的东西,但它是一个完成大部分 Action 的角色:旅行、攻击、购买元素等。我知道可能还有其他方法可以设计这样的引擎,但不知何故我无法弄清楚,所以我在这里寻求一些提示或建议。
哦,服务器后端将是 php+mysql,如果这有任何影响的话。
“但它是一个完成大部分 Action 的角色:”
是的,但是...
首先,将人类用户(“玩家”)与其角色分开。角色不是玩家。
您有大量对象。位置、被动事物、主动事物(怪物)和角色。他们都相互影响。
你必须完全隔离责任。角色不支配,角色只是参与。
如果您将每个可能的人类玩家 Action 定义为一个命令,您会发现它更令人愉快。 Command 的每个子类都可以更改模型的状态。事物移动,怪物移动,角色移动(角色,不是玩家。)
拾起或放下东西都是 命令 的子类,可将事物从一个角色移动到另一个位置或从一个位置移动到另一个角色。玩家发出命令;该命令会更新位置、项目和字符。
角色是被动的。事情大多是被动的。位置大多是被动的。命令对象具有更新模型中所有不同事物之间的状态和关联的算法。
如果您想更进一步,每个 Command 都可以是一个 Memento,具有撤消功能和执行功能。那么游戏的历史就是这些Mementos的历史。