我正在开发一款游戏,该游戏将具有与口袋妖怪相同的系统,即每个玩家都有一个“类型”(火、水、草等)。当玩家战斗时,我需要确定将攻击乘以什么因素,以创造优势和劣势。到目前为止,我在每个“类型”类中使用一个开关,该开关将另一个“类型”类作为输入并返回乘法因子。只有这些“类型”类中的三个,我写了很多颂歌,我可以预见当我想添加更多时它会在未来失控。
所以我的问题是,如何实现 DRY 解决方案来确定每种类型的优势和劣势?我附上了一张宠物小 Sprite 类型表,作为我正在尝试做的事情的引用。
最佳答案
如何枚举类型,并构建一个看起来就像您发布的二维矩阵。每当您需要战斗的“因素”时,使用攻击者和防御者作为二维数组中的索引来查找因素。查找会很快,代码会非常干净。
示例用例如下所示:
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
关于java - 比较球员的优势和劣势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16791081/