3

我正在开发一款游戏,它具有与口袋妖怪相同的系统,即每个玩家都有一个“类型”(火、水、草等)。当玩家战斗时,我需要确定乘以攻击的因素,以创造优势和劣势。到目前为止,我在每个“类型”类中使用了一个开关,该开关将另一个“类型”类作为输入并返回乘法因子。只有三个“类型”类,我正在写很多颂歌,我可以预见到将来当我想添加更多时它会失控。

所以我的问题是,如何实施 DRY 解决方案来确定每种类型的优缺点?我附上了一张口袋妖怪类型的表格,作为我正在尝试做的事情的参考。在此处输入图像描述

4

2 回答 2

3

如何枚举类型,并构建一个看起来就像您发布的那样的二维矩阵。每当您需要战斗的“因素”时,使用攻击者和防御者作为二维数组中的索引来查找因素。查找速度很快,代码也很干净。

示例用例如下所示:

factor = factorTable[FIRE][WATER]; // would set factor to 0.5
factor = factorTable[WATER][FIRE]; // would set factor to 2.0

正如 Noctua 建议的那样,将实际数据放在配置文件中可能是个好主意。这样您就可以轻松更改它而无需重新编译。如果您选择该选项,则需要某种解析函数来在程序开始时创建矩阵。

下一步要采取的更好的步骤是将表行为和类型表示封装在类中。底层实现可能仍然相同(或更改,这就是重点),但您不会直接公开表或枚举。

factor = StrengthFactors(Player1.Type(), Player2.Type()); // or similar
于 2013-05-28T11:39:14.087 回答
1

我认为您应该使用单个字符串数组来存储不同的类型。然后使用 2D 矩阵来存储乘数。这个想法是使用这个字符串数组的 id 来知道乘数在哪里。您将有一个 O(n) 复杂度来找到您想要的乘数。

于 2013-05-28T11:43:13.683 回答