首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >战争游戏交互的设计模式

战争游戏交互的设计模式
EN

Stack Overflow用户
提问于 2015-01-20 22:19:10
回答 2查看 118关注 0票数 1

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

现在我想编写一张损伤表。例如,当人类攻击一个矮人时,它会造成56点伤害。当矮人攻击精灵时,造成27点伤害。单元之间的每次交互都是唯一的,并给出一个数字。

我正在寻找一种设计模式,它可以很容易地添加一个新的单位,并更新伤害图表,以便它与其他单位交互。它还应该使拆卸设备变得容易

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

代码语言:javascript
复制
public int getDamage(Unit defender) {
    switch(defender.getID() {
        case 0: return 27;
        case 1: return 50;
        ....
    }
}

但以这种方式添加或删除单元似乎非常笨拙,因为您必须更改实现“unit”的每个类中的switch语句。它的可读性也不是很好。我还考虑过将switch语句放在一个单独的“Damage Chart”类中。但这也需要攻击者使用switch语句,并创建嵌套的switch语句(这很难看)。

有没有一个干净的方法来解决这个问题?也许已经存在针对此类问题的设计模式了?

EN

回答 2

Stack Overflow用户

发布于 2015-01-20 22:27:28

这类问题被称为"double dispatch“,有不同的解决方案。例如,如果你有一个给定数量的物种,你不仅关心它们之间的攻击,而且还有越来越多的不同决定(绘画,外交,运气等)。都依赖于实际的物种,你可以使用visitor pattern

票数 1
EN

Stack Overflow用户

发布于 2015-01-20 22:28:26

如果你真的想让伤害取决于攻击者和防御者,你必须管理这些数字。它实际上是一个二维矩阵。无论何时添加另一个单位,都需要向该矩阵添加两倍于当前单位数(一行和一列)的值。为此,我将使用一个二维数组。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28047608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档