// See https://aka.ms/new-console-template for more information using HightechICT.Amazeing.Client.Rest; using System.Net; using System.Xml.Linq; string apiAuthorization = "HTI Thanks You [OZL]"; string baseUrl = @"https://maze.hightechict.nl/"; string username = "Hi Hightech!"; string mazeName = "Example Maze"; Console.WriteLine("Starting bot..."); HttpClient httpClient = new (); httpClient.DefaultRequestHeaders.Add("Authorization", apiAuthorization); AmazeingClient mazeClient = new AmazeingClient(baseUrl, httpClient); ICollection mazeInfos = await mazeClient.AllMazes(); foreach(MazeInfo info in mazeInfos) { Console.WriteLine($"Name: {info.Name}, Tiles: {info.TotalTiles}"); } bool registered = await RegisterPlayer(username, true); if (!registered) { Console.WriteLine($"Player '{username}' failed to register"); return; } Console.WriteLine($"Player '{username}' registered"); Random random = new Random(); Console.WriteLine($"Entering maze '{mazeName}'"); PossibleActionsAndCurrentScore result = await mazeClient.EnterMaze(mazeName); do { await Task.Delay(100); // select a way to go MoveAction[] moves = result.PossibleMoveActions.ToArray(); MoveAction[] notExploredMoves = moves.Any(m => !m.HasBeenVisited) ? moves.Where(m => !m.HasBeenVisited).ToArray() : moves; if (moves.All(m => m.HasBeenVisited)) { Console.WriteLine("All adjacent tiles have been visited! Selecting next path random."); } else { Console.WriteLine($"{string.Join(", ", notExploredMoves.Select(m => m.Direction.ToString()))} have not been visited, selecting next move."); } int selected = random.Next(notExploredMoves.Length - 1); MoveAction moveAction = notExploredMoves[selected]; Console.WriteLine($"Moving {moveAction.Direction}, I have {(!moveAction.HasBeenVisited ? "not" : string.Empty)} been here."); result = await mazeClient.Move(moveAction.Direction); Console.WriteLine($"New tile has {(!result.CanExitMazeHere ? "no" : string.Empty)} exit."); } while (!result.CanExitMazeHere); await mazeClient.ExitMaze(); Console.WriteLine($"Exited the maze!"); async Task RegisterPlayer(string username, bool reset = false) { PlayerInfo? info = null; try { info = await mazeClient.GetPlayerInfo(); } catch (ApiException apiEx) when (apiEx.StatusCode == (int)HttpStatusCode.NotFound) { // no player registered. // do some logging } if (info != null && reset == false) { // player already registered and no re-register needed. return true; } if (info != null && reset == true) { // player already registered and re-register needed. try { // forget the player. await mazeClient.ForgetPlayer(); return true; } catch (ApiException apiEx) { // do some logging return false; } } try { // register the player. await mazeClient.RegisterPlayer(username); return true; } catch (ApiException apiEx) { // do some logging return false; } }