laneya2

cave exploration game
git clone https://git.ce9e.org/laneya2.git

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)