public IEnumerable <T> GetForEachPoint <T>(MazeSize size, Func <MazePoint, T> function) { var xValues = Enumerable.Range(0, size.X).ToList(); var yValues = Enumerable.Range(0, size.Y).ToList(); var zValues = Enumerable.Range(0, size.Z).ToList(); return(xValues.SelectMany(x => yValues.SelectMany(y => zValues.Select(z => _pointFactory.MakePoint(x, y, z)))).Select(point => function(point))); }
public MazePoint RandomPoint(MazeSize size, PickType type) { var x = _randomValueGenerator.GetNext(0, size.X - 1); var y = _randomValueGenerator.GetNext(0, size.Y - 1); var z = _randomValueGenerator.GetNext(0, size.Z - 1); if (type == PickType.RandomEdge) { switch ((RandomEdgeOptions)_randomValueGenerator.GetNext(1, 6)) { case RandomEdgeOptions.MinX: x = 0; break; case RandomEdgeOptions.MaxX: x = size.X - 1; break; case RandomEdgeOptions.MinY: y = 0; break; case RandomEdgeOptions.MaxY: y = size.Y - 1; break; case RandomEdgeOptions.MinZ: z = 0; break; case RandomEdgeOptions.MaxZ: z = size.Z - 1; break; } } return(_mazePointFactory.MakePoint(x, y, z)); }
public bool CanMove(MazePoint start, Direction d, MazeSize size, out MazePoint final) { switch (d) { case Direction.None: final = start; break; case Direction.Right: final = _pointFactory.MakePoint(start.X + 1, start.Y, start.Z); break; case Direction.Left: final = _pointFactory.MakePoint(start.X - 1, start.Y, start.Z); break; case Direction.Forward: final = _pointFactory.MakePoint(start.X, start.Y + 1, start.Z); break; case Direction.Back: final = _pointFactory.MakePoint(start.X, start.Y - 1, start.Z); break; case Direction.Up: final = _pointFactory.MakePoint(start.X, start.Y, start.Z + 1); break; case Direction.Down: final = _pointFactory.MakePoint(start.X, start.Y, start.Z - 1); break; default: throw new ArgumentException("Unsupported movement direction"); } return(_pointValidity.ValidPoint(final, size)); }
protected override void Initialise(ModelInitialisationOptions options) { Maze = new Dictionary <MazePoint, MazeCell>(); var size = options.Size; var xValues = Enumerable.Range(0, size.X).ToList(); var yValues = Enumerable.Range(0, size.Y).ToList(); var zValues = Enumerable.Range(0, size.Z).ToList(); foreach (var point in xValues.SelectMany(x => yValues.SelectMany(y => zValues.Select(z => _pointFactory.MakePoint(x, y, z))))) { Maze.Add(point, new MazeCell { Directions = Direction.None }); } }
public MazeCell[,,] Build(MazeSize size) { var maze = new MazeCell[size.X, size.Y, size.Z]; var xValues = Enumerable.Range(0, size.X).ToList(); var yValues = Enumerable.Range(0, size.Y).ToList(); var zValues = Enumerable.Range(0, size.Z).ToList(); foreach (var point in xValues.SelectMany(x => yValues.SelectMany(y => zValues.Select(z => _pointFactory.MakePoint(x, y, z))))) { maze[point.X, point.Y, point.Z] = new MazeCell { Directions = Direction.None }; } return(maze); }