public async Task <BoardConfiguration> GetBoardConfiguration()
        {
            try
            {
                var directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

                var fullFilePath = Path.Combine(directoryPath, _fileLocation);

                var text = await File.ReadAllTextAsync(fullFilePath);

                return(JsonConvert.DeserializeObject <BoardConfiguration>(text));
            }
            catch (Exception ex)
            {
                _outputLogger.LogMessage("Error Reading Board Configuration File");
                throw;
            }
        }
예제 #2
0
        public async Task RunGame()
        {
            try
            {
                var boardConfiguration = await _boardConfigurationProvider.GetBoardConfiguration();

                var movesConfiguration = await _movesConfigurationProvider.GetMovesConfiguration();

                if (_boardValidators.Any(x => !x.IsValid(boardConfiguration)))
                {
                    _outputLogger.LogMessage("Board Configuration Invalid");
                    return;
                }

                if (_moveValidators.Any(x => !x.IsValid(movesConfiguration)))
                {
                    _outputLogger.LogMessage("Move Configuration Invalid");
                    return;
                }

                var turtleGame = new TurtleGame(boardConfiguration);

                foreach (var move in movesConfiguration.Moves)
                {
                    turtleGame.Apply(move.ToMoveType());

                    if (turtleGame.HitAMine)
                    {
                        _outputLogger.LogMessage($"Hit a Mine at ({turtleGame.CurrentXPosition},{turtleGame.CurrentYPosition})");
                        break;
                    }

                    if (turtleGame.ReachedEnd)
                    {
                        _outputLogger.LogMessage($"Reached The End at ({turtleGame.CurrentXPosition},{turtleGame.CurrentYPosition})");
                        break;
                    }
                }

                if (!turtleGame.ReachedEnd && !turtleGame.HitAMine)
                {
                    _outputLogger.LogMessage($"No Moves Remaining finished at ({turtleGame.CurrentXPosition},{turtleGame.CurrentYPosition})");
                }
            }
            catch (Exception ex)
            {
                _outputLogger.LogMessage("Error Running Game");
                throw;
            }
        }