- commit
- dcf9d32efde6fea35c079fda6bb4bbba96977d10
- parent
- bc0e389ec750a1e891408023dcd34118fdae6f01
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-10-08 20:44
monster: lock on to target
Diffstat
| M | monster.go | 39 | +++++++++++++++++++++++---------------- |
1 files changed, 23 insertions, 16 deletions
diff --git a/monster.go b/monster.go
@@ -11,6 +11,7 @@ type Monster struct {
11 11 Id int
12 12 Rune rune
13 13 Pos Point
-1 14 Dir string
14 15 Health float64
15 16 Attack float64
16 17 Defense float64
@@ -24,6 +25,7 @@ func makeMonster(game *Game, pos Point) *Monster {
24 25 Id: game.createId(),
25 26 Rune: 'm',
26 27 Pos: pos,
-1 28 Dir: "right",
27 29 Speed: 0,
28 30 Attack: 2 + float64(game.Level),
29 31 Defense: 0 + float64(game.Level),
@@ -67,25 +69,30 @@ func (monster *Monster) TakeDamage(attack float64) {
67 69 func (monster *Monster) Move() {
68 70 game := monster.Game
69 71
70 -1 bestDist := 100000
71 -1 dir := "left"
72 -1 for player := range game.Players {
73 -1 dist := monster.Pos.Dist(player.Pos)
74 -1 if dist < bestDist {
75 -1 bestDist = dist
76 -1 dir = monster.Pos.Dir(player.Pos)
-1 72 pos := monster.Pos.Move(monster.Dir)
-1 73 player := game.getPlayerAt(pos)
-1 74
-1 75 if player == nil {
-1 76 bestDist := 100000
-1 77 monster.Dir = "left"
-1 78 for player := range game.Players {
-1 79 dist := monster.Pos.Dist(player.Pos)
-1 80 if dist < bestDist {
-1 81 bestDist = dist
-1 82 monster.Dir = monster.Pos.Dir(player.Pos)
-1 83 }
77 84 }
78 -1 }
79 85
80 -1 if bestDist > 10 {
81 -1 return
82 -1 }
83 -1 if !game.IsFree(monster.Pos.Move(dir)) {
84 -1 dir = RandomDir()
85 -1 }
-1 86 if bestDist > 10 {
-1 87 return
-1 88 }
-1 89 if !game.IsFree(monster.Pos.Move(monster.Dir)) {
-1 90 monster.Dir = RandomDir()
-1 91 }
86 92
87 -1 pos := monster.Pos.Move(dir)
88 -1 player := game.getPlayerAt(pos)
-1 93 pos = monster.Pos.Move(monster.Dir)
-1 94 player = game.getPlayerAt(pos)
-1 95 }
89 96
90 97 if player != nil {
91 98 player.TakeDamage(monster.Attack)