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); } } }
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; }
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); }
private static ResourceModel AddRock(TerrainTileModel tile, Random random) { return(new ResourceModel(0, ResourceType.Rock, random.Next(500, 5000), tile.Position, tile.Area)); }
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)); }
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); }