Fix score calculation for park/climb when they exceed limits.

This commit is contained in:
Patrick Fairbank
2018-05-19 13:36:58 -07:00
parent 4b05e9c6a0
commit 0393136588
3 changed files with 29 additions and 5 deletions

View File

@@ -7,13 +7,13 @@ package game
type Score struct {
AutoRuns int
AutoEndSwitchOwnership bool
AutoOwnershipPoints int
AutoEndSwitchOwnership bool
TeleopOwnershipPoints int
VaultCubes int
Levitate bool
Parks int
Climbs int
Parks int
Fouls []Foul
ElimDq bool
}
@@ -47,10 +47,17 @@ func (score *Score) Summarize(opponentFouls []Foul) *ScoreSummary {
summary.OwnershipPoints = score.AutoOwnershipPoints + score.TeleopOwnershipPoints
summary.VaultPoints = 5 * score.VaultCubes
climbs := score.Climbs
if climbs > 3 {
climbs = 3
}
if score.Levitate && score.Climbs < 3 {
climbs++
}
summary.ParkClimbPoints = 5*score.Parks + 30*climbs
parks := score.Parks
if parks+climbs > 3 {
parks = 3 - climbs
}
summary.ParkClimbPoints = 5*parks + 30*climbs
// Calculate bonuses.
if score.AutoRuns == 3 && score.AutoEndSwitchOwnership {

View File

@@ -34,6 +34,23 @@ func TestScoreSummary(t *testing.T) {
assert.Equal(t, true, blueSummary.AutoQuest)
assert.Equal(t, false, blueSummary.FaceTheBoss)
// Test park/climb limits.
redScore.Levitate = false
redScore.Climbs = 3
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Levitate = true
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Climbs = 4
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Climbs = 50
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Parks = 2
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Parks = 25
assert.Equal(t, 90, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
redScore.Climbs = 0
assert.Equal(t, 40, redScore.Summarize(blueScore.Fouls).ParkClimbPoints)
// Test Auto Quest boundary conditions.
blueScore.AutoEndSwitchOwnership = false
assert.Equal(t, false, blueScore.Summarize(redScore.Fouls).AutoQuest)

View File

@@ -8,11 +8,11 @@ package game
func TestScore1() *Score {
fouls := []Foul{{Rule{"G22", false}, 25, 25.2}, {Rule{"G18", true}, 25, 150},
{Rule{"G20", true}, 1868, 0}}
return &Score{1, true, 12, 47, 3, true, 0, 2, fouls, false}
return &Score{1, 12, true, 47, 3, true, 2, 0, fouls, false}
}
func TestScore2() *Score {
return &Score{3, true, 20, 73, 6, false, 1, 1, []Foul{}, false}
return &Score{3, 20, true, 73, 6, false, 1, 1, []Foul{}, false}
}
func TestRanking1() *Ranking {