首页 > 解决方案 > 有没有更简洁的方法来使用变量选择元组的一部分?

问题描述

我正在开发一个游戏,其中角色的几个参数由难度级别决定。例如,老板的大小将从简单到普通到困难增加。我知道我可以使用 if 语句和 switch 语句来做到这一点,这些语句嵌套或排列在彼此之上,有 1000 行代码(我可能最终会为 3 个难度级别的近 20 个老板提供十几个参数(等待添加更多...),但我想以更易于阅读、更简洁的方式使用元组来完成它。我认为这应该很容易,但我真的很难让它像错误一样工作表示元组没有成员难度级别:

let difficultyLevel = 0 //0 for easy, 1 for normal, 2 for hard
let bossOneScale = (CGFloat, CGFloat, CGFloat) = (0.3, 0.6, 0.9)
bossScale = bossOneScale.difficultyLevel

然后我在代码的主要部分中创建敌人时引用 bossScale,它会根据传递的难度值具有正确的大小。

我知道我可以通过以下方式轻松做到这一点:

switch bossNumber {
case 1: 
    if difficultyLevel = .easy {bossScale = 0.3)
    else if difficultyLevel == .normal {bossScale = 0.6)
    else if difficultyLevel == .hard {bossScale = 0.9)
case 2:...

我只是认为考虑到使用元组将获得多长时间会更容易阅读,但我不确定如何为元组下标以使用变量获得我想要的值......

谢谢!

标签: swifttuples

解决方案


您可以使用元组和枚举进行一些外围操作以供参考,包括命名元组(因此您可以引用 as bossOneScale.easy)和具有关联值的枚举(也就是将值存储在枚举中:)let damageMultiplier = .easy(0.3)。但是这些似乎在这里没有帮助,因为您仍然必须切换才能访问所有这些。

如果您希望能够使用 int 变量访问值,为什么不使用好的 ol' 数组:

let difficultyLevel = 0 //0 for easy, 1 for normal, 2 for hard
let bossOneScale: [CGFloat] = [0.3, 0.6, 0.9]
bossScale = bossOneScale[difficultyLevel]

推荐阅读