代码之家  ›  专栏  ›  技术社区  ›  Joe

Swift-添加“连续奖金”的逻辑

  •  -1
  • Joe  · 技术社区  · 10 年前

    在Swift中,我有一个简单的“游戏”,它根据用户界面中按下的某个按钮来计算分数。15个正常按钮。1个“条纹中断”按钮。一旦点击“打破连续记录”按钮,分数应反映分数,并增加连续记录奖金。

    在按下正常按钮之前,它工作正常。然后,我的连胜记录变为零,因此在下一次“正常按钮”按下时错误地添加分数。

    这是我的日志:

    Streak counter: 1 / Bonus point total: 0 / Score total: 3 / TOTAL SCORE: 3
    Streak counter: 2 / Bonus point total: 0 / Score total: 6 / TOTAL SCORE: 6
    Streak counter: 3 / Bonus point total: 0 / Score total: 9 / TOTAL SCORE: 9
    Streak counter: 4 / Bonus point total: 0 / Score total: 12 / TOTAL SCORE: 12
    Streak counter: 5 / Bonus point total: 0 / Score total: 15 / TOTAL SCORE: 15
    Streak counter: 6 / Bonus point total: 0 / Score total: 18 / TOTAL SCORE: 18
    Streak counter: 7 / Bonus point total: 2 / Score total: 21 / TOTAL SCORE: 23
    Streak counter: 8 / Bonus point total: 4 / Score total: 24 / TOTAL SCORE: 28
    Streak counter: 9 / Bonus point total: 6 / Score total: 27 / TOTAL SCORE: 33
    STREAK BROKEN!
    Streak counter: 1 / Bonus point total: 0 / Score total: 30 / TOTAL SCORE: 30
    

    你可以看到一旦STREAK BROKEN!点击按钮,下一次正常按下按钮时,分数不会正确相加。总分应为36分(正常抽奖+3分/连续奖0分),而不是30分。

    正常按钮按下代码:

    // Calculate the addition of a score:
    normalScore += 3
    
    // Calculate the streak:
    streakCounter += 1
    
    switch  streakCounter {
    case 1...6:
        bonusPointTotal += 0  
    case 7...9:
        bonusPointTotal += 2
    case 10...12:
        bonusPointTotal += 3
    case 13...16:
        bonusPointTotal += 4
    default:
        bonusPointTotal += 0
     }
    bonusLabelCounter.text = "+\(bonusPointTotal)"   
    totalScore = (normalScore + bonusPointTotal)  
    scoreLabelCounter.text = "\(totalScore)"    
    print("Streak counter: \(streakCounter) / Bonus point total: \(bonusPointTotal) / Score total: \(normalScore) / TOTAL SCORE: \(totalScore)")
    

    STREAK BROKEN按钮已按下

    totalScore = (normalScore + bonusPointTotal)
    // Reset the streak:
    streakCounter = 0
    print("STREAK BROKEN!")
    bonusPointTotal = 0 
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Lawrence413    10 年前

    事情是这样的:你设置了 bonusPointTotal 到0,然后当您再次按下时,您会将0添加到正常分数(30)。

    问题在于你的 条纹断裂 密码

    首先,设置 totalScore 是无用的,因为当你按下一个正常按钮时,你会再次设置它,而在按下正常按钮之前,你不会使用它。

    其次,我认为修复代码只是替换 条纹断裂 .因此更换 totalScore = (normalScore + bonusPointTotal) 具有 normalScore = totalScore .

    让我解释一下你的情况的逻辑。就在你打破连胜纪录之前 总计 33。您打破了连续纪录并将奖金设置为0。通常(使用您的代码) 总分 将比之前(33)低(30)。但是如果你设置 正常分数 总分 当你打破连胜时,你就会有一个 正常分数 33。然后按普通按钮加上3,得到 总计 36人(奖金为0,普通36人)。

    就是这样。