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; } }
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; } }