static async Task RunAsync() { try { string mazeId = await InitializeMaze().ConfigureAwait(false); Console.WriteLine(mazeId); await _gameService.PrintMazeAsync(mazeId).ConfigureAwait(false); #if INTERACTIVE #region Logic to play the game interactively bool active = true; while (active) { Console.WriteLine($"What is your next move (N, W, S, E)?"); var inputKey = Console.ReadKey().Key; if (!ValidKeys.Contains(inputKey)) { Console.WriteLine("The input is invalid."); continue; } var statuses = await _gameService.MakeNextMoveAsync(mazeId, DetermineMove(inputKey)).ConfigureAwait(false); await _gameService.PrintMazeAsync(mazeId).ConfigureAwait(false); Console.WriteLine(statuses.MoveStatus); if (!statuses.MazeState.Equals("active")) { active = false; Console.WriteLine(statuses.MazeState); } } #endregion #else var mazeState = await _gameService.GetMazeCurrentStateAsync(mazeId).ConfigureAwait(false); var mazeSolver = new MazeSolver(mazeState); mazeSolver.SetDistanceToExit(mazeState.ExitPosition[0]); while (mazeState.GameState.MazeState.ToLower() == "active") { var ponyPosition = mazeState.PonyPosition[0]; CellSide sideToCross = mazeSolver.FindSideToCross(ponyPosition); mazeSolver.Cells[ponyPosition].Sides[sideToCross] = CellSideState.Closed; var statuses = await _gameService.MakeNextMoveAsync(mazeId, DetermineMove(sideToCross)).ConfigureAwait(false); if (statuses.MoveStatus.ToLower().Equals("move accepted")) { mazeSolver.SetFirstEnteredSideStatus(ponyPosition, sideToCross); } await _gameService.PrintMazeAsync(mazeId).ConfigureAwait(false); Console.WriteLine(statuses.MoveStatus); mazeState = await _gameService.GetMazeCurrentStateAsync(mazeId).ConfigureAwait(false); if (mazeState.GameState.MazeState != "active") { Console.WriteLine(statuses.MazeState); } Thread.Sleep(250); } #endif } catch (Exception ex) { Console.WriteLine($"{ex.Message} Line : {ex.StackTrace}"); } }
public void SetDistanceToExitTestCurrentCellOutsideMaze() { var cellId = mazeSolver.Width * mazeSolver.Height + 10; mazeSolver.SetDistanceToExit(cellId); }