2016-05-02 15 views
-1

Swiftでは、UIの特定のボタンに基づいてスコアを集計する簡単な「ゲーム」があります。 15個の通常ボタン。 1 "streak broken"ボタンをクリックします。 「ストライクブレイク」ボタンをタップするとスコアにスコアが反映され、ストリークボーナスが追加されます。Swift - ボーナスストリークを追加するロジック

通常のボタンが押されるまで、正常に動作します。その後、私のストリークはゼロになり、次の「ノーマル・ボタン」を押すと誤ってスコアが追加されます。ここで

は私のログです:

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を見ることができます!ボタンをタップすると、次の通常のボタンを押したときにスコアが正しく加算されません。 (通常のタップ/ストリークボーナス用0 +3)合計スコア36でなければならない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

よくあることです:bonusPointTotalを0に設定し、もう一度押すと通常スコア(30)に0を追加します。

問題はあなたのストリークが壊れていますコードです。

最初に、totalScoreを設定すると、通常のボタンを押すときにもう一度設定し、通常のボタンを押す前に使用しないため、使用できません。

第2に、私はあなたのコードを修正することはちょうどの最初の行を置き換える問題であると信じています。ストリークブローク。したがって、totalScore = (normalScore + bonusPointTotal)normalScore = totalScoreに置き換えてください。

あなたの場合の論理を説明しましょう。ストロークを破る直前にの合計が33です。ストリークを破り、ボーナスを0に設定します。合計スコアは、以前よりも(30)低くなります(33)。あなたは通常のスコアを設定している場合でも、に合計スコアあなたは連勝を破るとき、あなたはその後、33の通常のスコアを持つことになります次に、あなたは、通常のボタンを押してから3を追加して、あなたは36の合計を取得します(ボーナス0とノーマル36)。

これだけです。

+0

ありがとうございました!このソリューションは完全に機能し、ロジックは完全に理解されました。どのように私はそれを見落としていたかわからないが、うーん、私はした。よくやった! – Joe

関連する問題