From 77dc0435787d6bcc002524ef014e8158b3583d29 Mon Sep 17 00:00:00 2001 From: Bethany Janos Date: Sat, 25 Sep 2021 20:42:30 -0400 Subject: [PATCH] Avoid hazards --- internal/battle/simple/simple.go | 11 ++++++++++- internal/battle/util/util.go | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/battle/simple/simple.go b/internal/battle/simple/simple.go index a626af4..707acf2 100644 --- a/internal/battle/simple/simple.go +++ b/internal/battle/simple/simple.go @@ -26,6 +26,7 @@ func (s *Snake) Move(state internal.GameState) (internal.Action, error) { return internal.Action{Move: possibleDirections[0]}, nil } + // Calculate need to find food and prioritize food := make([]string, 4) switch { case state.You.Health > 50: @@ -39,9 +40,17 @@ func (s *Snake) Move(state internal.GameState) (internal.Action, error) { foodPriorityMap[dir] = 1 } + // Avoid hazards if possible + avoidHazards := util.AvoidHazards(state.Board, state.You.Head) + avoidHazardsPriorityMap := map[string]int{} + + for _, dir := range avoidHazards { + avoidHazardsPriorityMap[dir] = 2 + } + avoidSelfPriorityMap := util.MoveAwayFromSelf(state.You) - return internal.Action{Move: findOptimal(possibleDirections, foodPriorityMap, avoidSelfPriorityMap)}, nil + return internal.Action{Move: findOptimal(possibleDirections, foodPriorityMap, avoidSelfPriorityMap, avoidHazardsPriorityMap)}, nil } // Info returns the style info for a simple snake diff --git a/internal/battle/util/util.go b/internal/battle/util/util.go index 8110016..5c392d0 100644 --- a/internal/battle/util/util.go +++ b/internal/battle/util/util.go @@ -66,6 +66,14 @@ func AvoidOthers(board internal.Board, head internal.Coord) []string { return decideDir(pos, avoid) } +// AvoidHazards returns moves that prevent snake from running into hazards +func AvoidHazards(board internal.Board, head internal.Coord) []string { + pos := potentialPositions(head) + avoid := convertCoordsToGrid(board.Hazards) + + return decideDir(pos, avoid) +} + // FindFood returns moves that gives food func FindFood(board internal.Board, head internal.Coord) []string { noFood := AvoidFood(board, head)