Example #1
0
        public static void GenerateResourceGrid()
        {
            var random          = new Random();
            var randomizedTiles = Tiles;
            int lengthRow       = randomizedTiles.GetLength(1);

            for (int i = randomizedTiles.Length - 1; i > 0; i--)
            {
                int i0 = i / lengthRow;
                int i1 = i % lengthRow;
                int j  = random.Next(i + 1);
                int j0 = j / lengthRow;
                int j1 = j % lengthRow;
                TerrainTileModel temp = randomizedTiles[i0, i1];
                randomizedTiles[i0, i1] = randomizedTiles[j0, j1];
                randomizedTiles[j0, j1] = temp;
            }

            for (int x = 0; x < randomizedTiles.GetLength(0); x++)
            {
                for (int y = 0; y < randomizedTiles.GetLength(1); y++)
                {
                    var tile = randomizedTiles[x, y];
                    Resources[x, y] = GetResources(tile);
                }
            }
        }
Example #2
0
        private static void CreateTile(int x, int y, double elevation, double moisture)
        {
            BiomeType type  = GetType(elevation, moisture);
            int       frame = GetFrame(type);
            var       tile  = new TerrainTileModel(frame, (int)TerrainTileModelSize.Width, (int)TerrainTileModelSize.Height, type, new Vector2((int)TerrainTileModelSize.Width * x, (int)TerrainTileModelSize.Height * y), new Vector2(1, 1));

            Tiles[x, y] = tile;
        }
Example #3
0
 private static ResourceModel AddMineral(TerrainTileModel tile, double noise, Random random)
 {
     if (noise < 0.05)
     {
         return(new ResourceModel(2, ResourceType.Diamond, random.Next(1, 300), new Vector2(tile.Area.Center.X - (int)ResourceSize.MineralWidth / 2 - 15, tile.Area.Center.Y - (int)ResourceSize.MineralHeight / 2), tile.Area));
     }
     if (noise < 0.1)
     {
         return(new ResourceModel(3, ResourceType.Gold, random.Next(1, 600), new Vector2(tile.Area.Center.X - (int)ResourceSize.MineralWidth / 2 - 15, tile.Area.Center.Y - (int)ResourceSize.MineralHeight / 2), tile.Area));
     }
     if (noise < 0.15)
     {
         return(new ResourceModel(6, ResourceType.Silver, random.Next(1, 800), new Vector2(tile.Area.Center.X - (int)ResourceSize.MineralWidth / 2 - 15, tile.Area.Center.Y - (int)ResourceSize.MineralHeight / 2), tile.Area));
     }
     if (noise < 0.2)
     {
         return(new ResourceModel(0, ResourceType.Coal, random.Next(1, 900), new Vector2(tile.Area.Center.X - (int)ResourceSize.MineralWidth / 2 - 15, tile.Area.Center.Y - (int)ResourceSize.MineralHeight / 2), tile.Area));
     }
     if (noise < 0.25)
     {
         return(new ResourceModel(1, ResourceType.Copper, random.Next(1, 900), new Vector2(tile.Area.Center.X - (int)ResourceSize.MineralWidth / 2 - 15, tile.Area.Center.Y - (int)ResourceSize.MineralHeight / 2), tile.Area));
     }
     return(null);
 }
Example #4
0
 private static ResourceModel AddRock(TerrainTileModel tile, Random random)
 {
     return(new ResourceModel(0, ResourceType.Rock, random.Next(500, 5000), tile.Position, tile.Area));
 }
Example #5
0
 private static ResourceModel AddWood(TerrainTileModel tile, Random random, int minFrame, int maxFrame)
 {
     return(new ResourceModel(random.Next(minFrame, maxFrame), ResourceType.Wood, random.Next(100, 600), new Vector2(tile.Area.Center.X - (int)ResourceSize.TreeWidth / 2, tile.Area.Center.Y - (int)ResourceSize.TreeHeight / 2), tile.Area));
 }
Example #6
0
        private static ResourceModel GetResources(TerrainTileModel tile)
        {
            double noise  = GenerateNoise1(tile.Position.X, tile.Position.Y);
            Random random = new Random();

            if (tile.Type == BiomeType.Water)
            {
                return(new ResourceModel(0, ResourceType.Water, random.Next(1000, 5000), tile.Position, tile.Area));
            }

            ResourceModel mineralResource;

            mineralResource = AddMineral(tile, noise, random);
            if (mineralResource != null)
            {
                return(mineralResource);
            }

            switch (tile.Type)
            {
            case BiomeType.Grassland:
                if (random.Next(100) <= 40)
                {
                    return(AddWood(tile, random, 2, 9));
                }
                return(AddRock(tile, random));

            case BiomeType.Rainforest:
                if (random.Next(100) <= 60)
                {
                    return(AddWood(tile, random, 6, 7));
                }
                return(AddRock(tile, random));

            case BiomeType.Taiga:
                if (random.Next(100) <= 50)
                {
                    return(AddWood(tile, random, 0, 1));
                }
                return(AddRock(tile, random));

            case BiomeType.Rock:
                return(AddRock(tile, random));

            case BiomeType.Sand:
                return(new ResourceModel(0, ResourceType.Sand, random.Next(200, 5000), tile.Position, tile.Area));

            case BiomeType.Gravel:
            case BiomeType.Bare:
                if (random.Next(100) <= 15)
                {
                    return(AddWood(tile, random, 2, 3));
                }
                return(AddRock(tile, random));

            case BiomeType.Dirt:
                if (random.Next(100) <= 30)
                {
                    return(AddWood(tile, random, 2, 3));
                }
                return(AddRock(tile, random));
            }

            return(null);
        }