Exemple #1
0
        public override List <ShapeBlock> GenerateShapeBlocks(int lowerBoundX, int lowerBoundY, int upperBoundX, int upperBoundY, int?startY = null)
        {
            var blocks = new List <ShapeBlock>();
            var random = RandomNumber.GetInstance();
            var curY   = startY ?? lowerBoundY;

            for (var curX = lowerBoundX; curX < upperBoundX; curX += random.Next(2, 4))
            {
                var length = Math.Min(random.Next(2, 5), upperBoundX - curX);
                MapShapeX(blocks, curX, curY, length);
                curX += length;
                curY  = Math.Max(lowerBoundY, Math.Min(curY + random.Next(-3, 4), upperBoundY));
            }

            return(blocks);
        }
Exemple #2
0
        public override List <ShapeBlock> GenerateShapeBlocks(int lowerBoundX, int lowerBoundY, int upperBoundX, int upperBoundY, int?startY)
        {
            Logging.Instance.Write("Randomly segmented generation strategy used.");

            var blocks = new List <ShapeBlock>();
            var random = RandomNumber.GetInstance();

            var curY = startY ?? random.Next(lowerBoundY, upperBoundY);

            for (int curX = lowerBoundX; curX < upperBoundX;)
            {
                var vertical = random.NextDouble() >= 0.5;
                if (vertical)
                {
                    var blockLength = random.Next(2, 3);
                    var downwards   = random.NextDouble() >= 0.5;
                    int newY;
                    if (downwards)
                    {
                        newY = Math.Max(curY - blockLength, lowerBoundY);
                        MapShapeY(blocks, curX, newY, curY - newY + 1);
                    }
                    else
                    {
                        newY = Math.Min(curY + blockLength, upperBoundY - 1);
                        MapShapeY(blocks, curX, curY, newY - curY + 1);
                    }
                    curY  = newY;
                    curX += 1;
                }
                else
                {
                    var blockLength = random.Next(2, 4);
                    var newX        = Math.Min(curX + blockLength, upperBoundX - 1);
                    MapShapeX(blocks, curX, curY, newX - curX + 1);
                    curX = newX + 1;
                }
            }

            return(blocks);
        }