处理游戏开发中的战斗效果

时间:2009-05-06 13:13:52

标签: javascript design-patterns

我正试图为一个我正在修补的游戏作为个人项目制定一个高级技术规范。这是一款基于回合制的冒险游戏,就我正在努力做的事情而言,可能最接近Archon

我遇到的问题是概念化开发战斗系统的最佳方法,我可以在一开始就简单地实施,但这将允许在未来添加扩展和复杂性。

具体而言,我无法弄清楚如何处理战斗特效,即可以由演员,物品或环境应用或移除的奖励或负面效果。

  • 如果游戏本身在每次尝试进行决定性的掷骰时检查每个武器,护甲,演员和位置,我是否让演员处理所有对他们有效的效果。
  • 效果是在单个对象中处理还是有“效果”对象或两者兼而有之?

我可能在这里没有完全解释自己,如果我的要求过于宽泛和通风,我很乐意尝试扩大问题。但我的初步思考是,比我更聪明的人花费时间和精力来计算这样的事情,坦率地说,我不想过早地将谈话归咎于我自己愚蠢的死胡同。

有问题的语言是javascript,虽然在这一点上我并不认为它会产生很大的不同。

3 个答案:

答案 0 :(得分:7)

你所谓的'特效'曾被称为'修饰符',但现在在MMO中​​流行的术语是'增益'。考虑到您可以选择在每个阶段都能够提供多少功能,处理这些操作就像您希望的那样简单或困难。

但从根本上说,系统的每个方面通常都会存储适用于它的修饰符列表,您可以按需查询它们。通常情况下,在任何给定时间只有少数修饰符适用于任何一个玩家,所以这不是一个问题 - 获取玩家的统计数据和技能/法术/任何赋予的任何修饰符,添加磨损设备赋予的任何修饰符,然后添加有关武器传授的任何东西。如果您在这里提出了一个标准接口(例如sumModifiersTo(attributeID)),由演员,项目,位置等使用,那么实现这一点可以快速而简单。

通常,'效果'对象将包含在它们所属的实体中:actor有一个效果列表,它们佩戴或使用的项目都有自己的效果列表。如果效果明确激活和/或有时间限制,则由您决定存储它们的位置 - 例如。如果你有魔法药水或其他消耗品,它们的效果将需要附加到Actor而不是(可能是被破坏的)项目。

不要试图尝试让效果就地修改actor属性,因为如果你不确保所有的添加和删除都是在正确的情况下完成的,你会很快发现属性很容易“漂移”协议。它还使得以后绕过某些修饰符变得更加困难。例如。想象一个神奇的盾牌只能防止其他魔法 - 你可以将某种谓词传递给你的修饰符总计函数,忽略某些类型的效果来做到这一点。

答案 1 :(得分:2)

看看伊丽莎白弗里曼的书Head First Design Patterns。具体来说,请阅读Decorator和Factory模式以及编程到接口的方法,而不是实现。我发现这本书非常有效地说明了一些可能让你继续这样做的复杂概念。

希望这有助于指出正确的方向。

答案 2 :(得分:0)

乍一看,我会说,个别战斗员(玩家和NPC)在确定他们的战斗特征(即护甲值,命中数,伤害范围等)方面发挥作用,给出所有适用的修饰符对那个战士。因此,战斗系统并没有试图弄清楚角色的类是否给予他/她一个护甲加值,是否有法术武器重击等等。

但我希望战斗系统本身不属于个别战斗员。它将获取有关攻击者和所需类型的攻击以及目标或目标集的信息并解决该问题。

对我来说,这种模型反映了我们如何在铅笔和纸上RPG中实际进行战斗。 DM向每个玩家询问他或她的角色的详细信息,然后使用该信息作为输入进行战斗。它在现实世界中起作用表明它是一个非常灵活的系统。