Exemple #1
0
        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));
        }
Exemple #4
0
        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);
        }