示例#1
0
        public MapViewForm()
        {
            InitializeComponent();

            Size        = new Size(1000, 700);
            WindowState = FormWindowState.Maximized;

            DoubleBuffered = true;

            var r = new Random();

            var easyTier   = new SpawnerConfig(SigmaIndex.Zero, 3, 30, 0.5);
            var mediumTier = new SpawnerConfig(SigmaIndex.Zero, 30, 1000, 0.5);
            var hardTier   = new SpawnerConfig(SigmaIndex.Zero, 14, 16, 0.5);
            var nightmare  = new SpawnerConfig(SigmaIndex.Zero, 16.5, 20, 0.5);

            var gen = HommMapGenerator
                      .From(new DiagonalMazeGenerator(r))
                      .With(new BfsRoadGenerator(r, TileTerrain.Road)
                            .Over(new VoronoiTerrainGenerator(r, TileTerrain.Nature.ToArray())))
                      .With(new TopologicSpawner(r, mediumTier, p => new Mine(Resource.Crystals, p)))
                      .With(new MinDistanceSpawner(r, hardTier, p => new Mine(Resource.Ore, p)))
                      .With(new TopologicSpawner(r, easyTier, p => new Mine(Resource.Rubles, p)))
                      .And(new MinDistanceSpawner(r, nightmare, p => new Mine(Resource.Gems, p)));

            Map map = null;

            var generateButton = new Button {
                Text = "Generate!", Location = new Point(150, 0)
            };

            var mapSizeBox = new ComboBox();

            for (var size = 4; size < 20; ++size)
            {
                mapSizeBox.Items.Add(2 * size);
            }

            mapSizeBox.SelectedIndex = 5;

            generateButton.Click += (s, e) =>
            {
                mapSize = (int)mapSizeBox.SelectedItem;
                map     = gen.GenerateMap(mapSize);
                this.Invalidate();
            };

            Controls.Add(mapSizeBox);
            Controls.Add(generateButton);

            Paint += (s, e) => {
                if (map != null)
                {
                    foreach (var tile in map)
                    {
                        DrawTile(tile, e.Graphics);
                    }
                }
            };
        }
示例#2
0
        public Map CreateMap(Random r)
        {
            HommMapGenerator generator = CreateGenerator(r);

            Map map = null;

            while (map == null)
            {
                try { map = generator.GenerateMap(mapSize); }
                catch { }
            }

            return(map);
        }
示例#3
0
        public HommMapGenerator CreateGenerator(Random r)
        {
            var builder = HommMapGenerator
                          .From(new DiagonalMazeGenerator(r))
                          .With(new BfsRoadGenerator(r, TileTerrain.Road)
                                .Over(new VoronoiTerrainGenerator(r, TileTerrain.Nature.ToArray())));

            builder = AddGuards(builder, r);
            builder = AddMines(builder, r);
            builder = AddDwellings(builder, r);
            builder = AddPiles(builder, r);
            builder = AddEnemies(builder, r);

            return(builder.CreateGenerator());
        }
示例#4
0
        public static Map CreateMap(Random random)
        {
            var easyTier   = new SpawnerConfig(Location.Zero, 3, 30, 0.5);
            var mediumTier = new SpawnerConfig(Location.Zero, 30, 1000, 0.5);
            var hardTier   = new SpawnerConfig(Location.Zero, 14, 16, 0.5);
            var nightmare  = new SpawnerConfig(Location.Zero, 16.5, 20, 0.5);

            var mapGenerator = HommMapGenerator
                               .From(new DiagonalMazeGenerator(random))
                               .With(new BfsRoadGenerator(random, TileTerrain.Road)
                                     .Over(new VoronoiTerrainGenerator(random, TileTerrain.Nature.ToArray())))
                               .With(new GraphSpawner(random, mediumTier, p => new Mine(Resource.Crystals, p)))
                               .With(new DistanceSpawner(random, hardTier, p => new Mine(Resource.Ore, p)))
                               .With(new GraphSpawner(random, easyTier, p => new Mine(Resource.Rubles, p)))
                               .And(new DistanceSpawner(random, nightmare, p => new Mine(Resource.Gems, p)));

            return(mapGenerator.GenerateMap(18));
        }