diff options
Diffstat (limited to 'go/game/attack.go')
| -rw-r--r-- | go/game/attack.go | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/go/game/attack.go b/go/game/attack.go index 97881d48..35af7ff2 100644 --- a/go/game/attack.go +++ b/go/game/attack.go @@ -8,28 +8,41 @@ import ( ) type Attack struct { - Damage int - Range int + attacks []int } -func INVALID_ATTACK() Attack { - return Attack{-1, -1} +func INVALID_ATTACK(a Attack) bool { + return a.attacks == nil +} + +func (a Attack) MaxRange() int { + return len(a.attacks) +} + +func (a Attack) DamageInRange(r int) int { + if r > a.MaxRange() { + return 0 + } + + return a.attacks[r-1] } func (a Attack) String() string { - if a == INVALID_ATTACK() { + if INVALID_ATTACK(a) { return "invalid attack" } - if a.Range == 1 { - return fmt.Sprintf("%d", a.Damage) + if len(a.attacks) == 1 { + return fmt.Sprintf("%d", a.attacks[0]) } - return fmt.Sprintf("%d range %d", a.Damage, a.Range) + + r := a.MaxRange() + return fmt.Sprintf("%d range %d", a.DamageInRange(r), r) } func parseAttack(attack interface{}) Attack { if damage, ok := attack.(int); ok { - return Attack{damage, 1} + return Attack{[]int{damage}} } attackStr := attack.(string) @@ -46,5 +59,11 @@ func parseAttack(attack interface{}) Attack { log.Fatalf("Attack %s has no valid Range value\n", attackStr) } } - return Attack{a, r} + + attacks := make([]int, 0, r) + for i := 0; i < r; i++ { + attacks = append(attacks, a) + } + + return Attack{attacks} } |
