战争游戏交互的设计模式



我正在使用java开发一款战争游戏。这个游戏有不同的战斗单位。例如,单位是"人类"、"矮人"one_answers"精灵",它们都有自己的属性。为了适应这些属性,我目前有一个"Human"、"Dwarf"one_answers"Elf"类,它们都扩展了抽象的"Unit"类。

现在我想编制一个伤害图表。例如,当人类攻击一个侏儒时,其伤害为56。当矮人攻击小精灵时,会造成27点伤害。单元之间的每个交互都是唯一的,并给出一个数字。

我正在寻找一种设计模式,它可以很容易地添加一个新的单位并更新损坏图表,使其与其他单位相互作用。它还应该使移除单元变得容易

我考虑给每个单元一个唯一的ID,并在每个单元中放入这样的方法。

public int getDamage(Unit defender) {
    switch(defender.getID() {
        case 0: return 27;
        case 1: return 50;
        ....
    }
}

但是,以这种方式添加或删除单元似乎很麻烦,因为您必须更改每个实现"unit"的类中的switch语句。它的可读性也不太好。我还想过把switch语句放在一个单独的"伤害图"类中。但这也需要攻击者使用switch语句,并创建嵌套的switch语句(这很难看(。

有没有一个干净的方法来解决这个问题?也许这种问题已经有了设计模式?

这种问题被称为"双重调度",有不同的解决方案。例如,如果你有给定数量的物种,你不仅关心它们之间的攻击,而且有越来越多的不同决策(绘图、外交、运气等(都取决于实际物种,你可以使用访问者模式。

如果你真的想让伤害根据具体情况取决于攻击者和防御者,你必须管理好这些数字。它实际上是一个二维矩阵。每当添加另一个单位时,都需要将当前单位数(一行一列(值的两倍添加到该矩阵中。我会使用一个二维数组。

如果你有很多单元,这很快就会变得相当乏味。我建议使用攻击和防御等级(例如矮人斧人30/20(,用"他们是什么"标记单位(例如精灵、矮人(和一些特殊功能(例如对精灵+4/+1;或对斧人-5/0(。这样,你就可以添加一个新的单元,应用一些标签和特殊功能,然后就可以完成了,因为剩下的只是简单的计算。

换句话说:我认为你有数据问题,而不是语言问题。

最新更新