public void GeneratePowerUps(GameMap map) { var powerUpOrder = PlanPowerUpOrder(); var powerUpDistances = PlanPowerUpDistribution(map, powerUpOrder); const int quadrants = 4; var translator = new CoordinateTranslator(map.MapWidth + 1, map.MapHeight + 1); GameBlock block; for (var quadrant = 0; quadrant < quadrants; quadrant++) { for (var powerUpCount = 0; powerUpCount < powerUpOrder.Count; powerUpCount++) { block = GetRandomBlockFromQuadrantAtDistance(map, quadrant, translator, powerUpDistances[powerUpCount]); _logger.LogDebug("Quadrant : " + quadrant + "; Distance: " + powerUpDistances[powerUpCount] + "; Block: " + (block == null ? "NULL" : block.Location.ToString())); var powerUp = powerUpOrder[powerUpCount]; if (powerUp == '&') { block.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.BombBagPowerUp)); } else if (powerUp == '!') { block.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.BombRaduisPowerUp)); } } } block = map.GetBlockAtLocation(map.MapWidth / 2 + 1, map.MapHeight / 2 + 1); block.SetEntity(null); block.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.SuperPowerUp)); }
private void GenerateIndesctructableWalls(GameMap gameMap) { //Generate Map Edges and created an indesctructable wall at every odd location using (var enumerator = gameMap.GetEnumerator()) { while (enumerator.MoveNext()) { var block = enumerator.Current; if (block == null || block.Entity != null) { continue; } var x = block.Location.X; var y = block.Location.Y; if (x == 1 || y == 1 || x == gameMap.MapWidth || y == gameMap.MapHeight) { block.SetEntity(_entityFactory.ConstructEntity(EntityFactory.EntityType.IndesctructibleWall)); } else if (block.Location.IsOdd()) { block.SetEntity(_entityFactory.ConstructEntity(EntityFactory.EntityType.IndesctructibleWall)); } } } }
public void GeneratePowerUps(GameMap gameMap) { var bombagRandom = Rand; var bombRadiiRandom = Rand; var quadrantWidth = (gameMap.MapWidth) / 2 + 1; var quadrantHeight = (gameMap.MapWidth) / 2 + 1; const int quadrants = 4; var translator = new CoordinateTranslator(gameMap.MapWidth + 1, gameMap.MapHeight + 1); for (var i = 0; i < quadrants; i++) { var bomBags = (Settings.Default.BombBagPowerUpMultiplier * gameMap.RegisteredPlayerEntities.Count) / quadrants; var bomRadii = (Settings.Default.BombRaduisPowerUpMultiplier * gameMap.RegisteredPlayerEntities.Count) / quadrants; while (bomBags > 0) { var x = bombagRandom.Next(1, quadrantWidth); var y = bombagRandom.Next(1, quadrantHeight); x = x == 0 ? 1 : x; y = y == 0 ? 1 : y; var location = ToQuadrantLocation(translator, 4 - i, x, y); var gameBlock = gameMap.GetBlockAtLocation(location.X, location.Y); if (gameBlock.PowerUpEntity == null && gameBlock.Entity != null && gameBlock.Entity.GetType() == typeof(DestructibleWallEntity)) { gameBlock.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.BombBagPowerUp)); bomBags--; } } while (bomRadii > 0) { var x = bombRadiiRandom.Next(1, quadrantWidth); var y = bombRadiiRandom.Next(1, quadrantHeight); var location = ToQuadrantLocation(translator, i, x, y); var gameBlock = gameMap.GetBlockAtLocation(location.X, location.Y); if (gameBlock.PowerUpEntity == null && gameBlock.Entity != null && gameBlock.Entity.GetType() == typeof(DestructibleWallEntity)) { gameBlock.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.BombRaduisPowerUp)); bomRadii--; } } } var block = gameMap.GetBlockAtLocation(gameMap.MapWidth / 2 + 1, gameMap.MapHeight / 2 + 1); block.SetEntity(null); block.SetPowerUpEntity((IPowerUpEntity)_entityFactory.ConstructEntity(EntityFactory.EntityType.SuperPowerUp)); }