コード例 #1
0
        protected override void Split(RoomGenerator roomGenerator)
        {
            var minAreaHeight = roomGenerator.MinHeight + 2;
            var maxAreaHeight = roomGenerator.MaxHeight + 2;

            if (Bounds.Height < minAreaHeight)
            {
                return;
            }
            else if (Bounds.Height > maxAreaHeight)
            {
                var splitRow = Random.Next(minAreaHeight, Bounds.Height - minAreaHeight + 1);

                var height1 = splitRow;
                var height2 = Bounds.Height - splitRow + 1;

                if (height1 >= minAreaHeight)
                {
                    SubArea1 = new HorizontalArea(roomGenerator, Random, Bounds.X, Bounds.Y, Bounds.Width, height1);
                }

                if (height2 >= minAreaHeight)
                {
                    SubArea2 = new HorizontalArea(roomGenerator, Random, Bounds.X, Bounds.Y + splitRow - 1, Bounds.Width, height2);
                }
            }
        }
コード例 #2
0
        public TileMap Generate(int seed, TextWriter logStream)
        {
            var random  = new Random(seed);
            var tileMap = new TileMap(_rows, _columns);

            tileMap.Fill(TileRegistry.Wall);

            _roomGenerator.Reset();

            var dungeonArea = new HorizontalArea(_roomGenerator, random, 0, 0, _columns, _rows);

            RenderRooms(tileMap, dungeonArea, logStream);
            RenderCorridors(tileMap, dungeonArea, logStream);

            DecorateWithDoors(tileMap, dungeonArea, logStream);

            return(tileMap);
        }