using HightechICT.Amazeing.Client.Rest; using LogConsole = System.Console; namespace Bobo.System.Maze.Bot { public class SimplerBot { public static async Task Run(string mazeName, AmazeingClient mazeClient) { if (mazeClient == null) throw new ArgumentException(nameof(mazeClient)); if (string.IsNullOrWhiteSpace(mazeName)) throw new ArgumentException(nameof(mazeName)); Random random = new Random(); LogConsole.WriteLine($"Entering maze '{mazeName}'"); PossibleActionsAndCurrentScore result = await mazeClient.EnterMaze(mazeName); Stack directions = new Stack(); int collected = 0; do { //await Task.Delay(500); if (result.PossibleMoveActions.All(m => m.HasBeenVisited)) { //LogConsole.WriteLine("All adjacent tiles have been visited! Going back."); Direction direction = directions.Pop(); switch (direction) { case Direction.Left: direction = Direction.Right; break; case Direction.Right: direction = Direction.Left; break; case Direction.Up: direction = Direction.Down; break; case Direction.Down: direction = Direction.Up; break; } //LogConsole.WriteLine($"Moving {direction}, I have been here."); result = await mazeClient.Move(direction); } else { MoveAction[] notVisited = result.PossibleMoveActions.Where(m => !m.HasBeenVisited).ToArray(); //LogConsole.WriteLine($"{string.Join(", ", notVisited.Select(m => m.Direction.ToString()))} have not been visited, selecting next move."); int selected = random.Next(notVisited.Length - 1); MoveAction moveAction = notVisited[selected]; //LogConsole.WriteLine($"Moving {moveAction.Direction}, I have {(!moveAction.HasBeenVisited ? "not" : string.Empty)} been here."); result = await mazeClient.Move(moveAction.Direction); directions.Push(moveAction.Direction); } if (result.CanCollectScoreHere && result.CurrentScoreInHand > 0) { collected += result.CurrentScoreInHand; await mazeClient.CollectScore(); } //LogConsole.WriteLine($"New tile has {(!result.CanExitMazeHere ? "no" : string.Empty)} exit."); } while (!result.CanExitMazeHere); await mazeClient.ExitMaze(); LogConsole.WriteLine($"Collected {collected}!"); LogConsole.WriteLine($"Exited maze {mazeName}!"); return collected; } } }