在這裏工作的規則是,用戶可以獲得10,20和30條紋的徽章。但是用戶不能被授予同一連勝的多個徽章。我正在跟蹤用戶模型中的consec wins。如何重構涉及連續集的棘手邏輯?
例如,如果用戶擊中10連勝,則用戶被授予10連勝徽章。如果用戶在20連勝中,他/她會收到20連勝徽章。如果用戶在30場連勝中,用戶被授予30連勝徽章。用戶不應該被授予三個10連勝徽章 - 只有一個10連勝,一個20連勝和一個30連勝。
此外,如果用戶達到40連勝,那麼用戶應該被授予10連勝徽章。如果用戶打50,那麼他/她應該被授予20連勝徽章。如果用戶擊中60,則用戶應該獎勵30連勝徽章。如果用戶擊中70,則用戶應該被授予10連勝。我想你在這裏得到了模式。 30連勝獎盃是用戶可以獲得的最大獎盃。但用戶可以獲得無限的連勝。
def check_win_streak(streak)
badge = 10
while badge < BADGE::MAX_STREAK_BADGE_SIZE do # MAX_STREAK_BADGE_SIZE = 30
if streak < badge then
break
end
if (streak % badge == 0) then
award_streak_badge(badge)
end
badge += 10
end
end