Source File: curse-you-go-rogue/04_combat/combat.go
package main
import (
"fmt"
"math/rand"
)
func (game *Game) EnemyDeath() {
is_dead := make([]Position, 0, len(game.Enemies))
for pos, enemy := range game.Enemies {
if enemy.HP < 0 {
is_dead = append(is_dead, pos)
}
}
for _, pos := range is_dead {
delete(game.Enemies, pos)
}
}
func (game *Game) ApplyDamage(attacker *Enemy, defender *Enemy) {
damage := rand.Int() % attacker.Damage
defender.HP -= damage
if damage == 0 {
game.SetStatus("MISSED!")
} else if defender.HP > 0 {
game.SetStatus(fmt.Sprintf("HIT %d damage", damage))
} else {
game.SetStatus("DEAD!")
}
}
func (game *Game) Attack(target Position) {
enemy, hit_enemy := game.Enemies[target]
if hit_enemy {
game.ApplyDamage(&game.Player, enemy)
game.ApplyDamage(enemy, &game.Player)
}
}