Пример #1
0
        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}");
            }
        }