public HeuristicsResults GetResults(AlgorithmRunResults results) { var shortestPath = _shortestPathSolver.GetGraph(results.Carver); return(new HeuristicsResults { TotalCells = GetTotalSize(results.Carver.Size), ShortestPathResult = shortestPath, Stats = _mazeStatsGenerator.GetResultsFromMaze(results) }); }
public MazeStatsResult GetResultsFromMaze(AlgorithmRunResults results) { return(GetResult(results.DirectionsCarvedIn)); }
public MazeGenerationResults GenerateMaze(MazeGenerationSettings settings) { IMazeCarver carver = null; var modelBuildTime = _timeRecorder.GetRunningTime(() => { var model = _mazeModelFactory.BuildMaze(settings); carver = _mazeFactory.GetMazeCarver(model); }); AlgorithmRunResults results = null; int extraWallsAdded = 0; var generationTime = _timeRecorder.GetRunningTime(() => { switch (settings.Algorithm) { case Algorithm.None: throw new ArgumentException("None not supported"); case Algorithm.GrowingTreeAlgorithm: results = _growingTreeAlgorithm.GenerateMaze(carver, settings); break; case Algorithm.RecursiveBacktrackerAlgorithm: results = _recursiveBacktrackerAlgorithm.GenerateMaze(carver, settings); break; case Algorithm.BinaryTreeAlgorithm: results = _binaryTreeAlgorithm.GenerateMaze(carver, settings); break; default: throw new ArgumentException("Unsupported algorithm type"); } carver = results.Carver; extraWallsAdded = _extraWall.Calulate(carver.Size); _randomCarver.CarveRandomWalls(carver, settings.ExtraWalls, extraWallsAdded); }); DeadEndFillerResult deadEndFillerResults = null; var deadEndFillerTime = _timeRecorder.GetRunningTime(() => { deadEndFillerResults = _deadEndFiller.Fill(carver); }); AgentResults result = null; var agentGenerationTime = _timeRecorder.GetRunningTime(() => { if (settings.AgentType != AgentType.None) { result = _agentFactory.MakeAgent(settings.AgentType).RunAgent(carver); } }); HeuristicsResults heuristicsResults = null; var heuristicsTime = _timeRecorder.GetRunningTime(() => { heuristicsResults = _heuristicsGenerator.GetResults(results); }); var times = new [] { modelBuildTime, generationTime, deadEndFillerTime, agentGenerationTime, heuristicsTime }; var totalTime = times.Aggregate(new TimeSpan(), (seed, value) => seed.Add(value)); return(new MazeGenerationResults { MazeJumper = carver.CarvingFinished(), HeuristicsResults = heuristicsResults, DirectionsCarvedIn = results.DirectionsCarvedIn, DeadEndFillerResults = deadEndFillerResults, ModelTime = modelBuildTime, AgentResults = result, GenerationTime = generationTime, DeadEndFillerTime = deadEndFillerTime, AgentGenerationTime = agentGenerationTime, HeuristicsTime = heuristicsTime, TotalTime = totalTime }); }