/// <summary> /// Генерирует колекцию <see cref="Star"/> системы /// </summary> /// <param name="name"> /// Имя звездной системы, в которой находятся генерируемые звезды /// </param> /// <returns> /// <see cref="List{T}"/>, содержащий <see cref="Star"/> /// </returns> private static List <Star> GenerateSystemStars(string name) { List <Star> stars = new List <Star>(); int starsCount = 0; int probabilityIndex = HelperRandomFunctions.GetRandomInt(1, maxPercents + 1); if (probabilityIndex < 70) { starsCount = 1; } else if (probabilityIndex < 100) { starsCount = 2; } else { starsCount = 3; } for (int index = 0; index < starsCount; index++) { stars.Add(StarFactory.GenerateStar($"{name} Star #{index + 1}")); } return(stars); }
public Resources GenerateResources() { double hydrogen = HelperRandomFunctions.GetRandomDouble() * 1E22; double commonMetals = HelperRandomFunctions.GetRandomDouble() * 1E24; double rareElements = HelperRandomFunctions.GetRandomDouble() * 1E20; return(new Resources(hydrogen, commonMetals, rareElements)); }
/// <summary> /// Генерирует газовые планеты системы /// </summary> /// <param name="systemName"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> /// <param name="planetCount"> /// Счетчик планет системы /// </param> private static List <Planet> GetGasGiantPlanets(string systemName, ref int planetCount) { int gasGiantCount = HelperRandomFunctions.GetRandomInt(minGasGiantCount, maxGasGiantCount + 1); List <Planet> planets = new List <Planet>(); for (int index = 0; index < gasGiantCount; index++) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(TemperatureClass.Cold, VolatilesClass.Airless, SubstancesClass.Jupiter))); planetCount++; } return(planets); }
public static IList <StarSystem> TryToFindNewStarSystems(int discoveredSystemsCount) { if (discoveredSystemsCount <= 0 || discoveredSystemsCount > 1_000_000) { throw new ArgumentOutOfRangeException("discoveredSystems count must be greater than zero"); } IList <StarSystem> generatedSystems = new List <StarSystem>(); if (HelperRandomFunctions.ProbableBool(DiscoveryProbability)) { generatedSystems = DiscoverNewStarSystem(discoveredSystemsCount); } return(generatedSystems); }
/// <summary> /// Сгенерировать звезду с заданым именем /// </summary> /// <param name="name"> /// Имя звезды /// </param> /// <returns> /// Возвращает экземпляр класса <see cref="Star"/> /// </returns> public static Star GenerateStar(string name) { int radius = 0; LuminosityClass luminosityClass; double starFraction = HelperRandomFunctions.GetRandomDouble(); if (starFraction < 0.0003) { radius = HelperRandomFunctions.GetRandomInt(4_620_000, 10_000_000); luminosityClass = LuminosityClass.O; } else if (starFraction < 0.0013) { radius = HelperRandomFunctions.GetRandomInt(1_260_000, 4_620_000); luminosityClass = LuminosityClass.B; } else if (starFraction < 0.006) { radius = HelperRandomFunctions.GetRandomInt(805_000, 1_260_000); luminosityClass = LuminosityClass.A; } else if (starFraction < 0.03) { radius = HelperRandomFunctions.GetRandomInt(728_000, 805_000); luminosityClass = LuminosityClass.F; } //реальное соотношение 0.076 else if (starFraction < 0.3) { radius = HelperRandomFunctions.GetRandomInt(672_000, 728_000); luminosityClass = LuminosityClass.G; } //реальное соотношение 0.12 else if (starFraction < 0.4) { radius = HelperRandomFunctions.GetRandomInt(490_000, 672_000); luminosityClass = LuminosityClass.K; } else { radius = HelperRandomFunctions.GetRandomInt(360_000, 490_000); luminosityClass = LuminosityClass.M; } return(new Star(name, radius, luminosityClass)); }
private static IList <StarSystem> DiscoverNewStarSystem(int discoveredSystemsCount) { IList <StarSystem> generatedSystems = new List <StarSystem>(); int maxSystemsToGenerate = (int)(Math.Sqrt(discoveredSystemsCount)); int systemsToGenerate = HelperRandomFunctions.GetRandomInt(1, maxSystemsToGenerate + 1); for (int index = 0; index < systemsToGenerate; index++) { StarSystem generatedSystem = StarSystemFactory.GetStarSystem($"System {discoveredSystemsCount + 1} #{index}"); generatedSystems.Add(generatedSystem); } return(generatedSystems); }
/// <summary> /// Генерирует безжизненные планеты системы /// </summary> /// <param name="nameTemplate"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> /// <param name="planetCount"> /// Счетчик планет системы /// </param> /// <param name="stars"> /// Коллекция <see cref="Star"/> системы /// </param> private static List <Planet> GetBarrenPlanets(string systemName, ref int planetCount, List <Star> stars) { int barrenCount = HelperRandomFunctions.GetRandomInt(minBarrenCount, maxBarrenCount + 1); LuminosityClass systemStarClass = stars[0].LumClass; List <Planet> planets = new List <Planet>(); TemperatureClass planetTemperature; if (systemStarClass == LuminosityClass.M || systemStarClass == LuminosityClass.K) { planetTemperature = TemperatureClass.Warm; } else { planetTemperature = TemperatureClass.Hot; } if (HelperRandomFunctions.PercentProbableBool(20) && barrenCount >= 1) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Ferria))); planetCount++; barrenCount--; if (HelperRandomFunctions.PercentProbableBool(20) && barrenCount >= 1) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Ferria))); planetCount++; barrenCount--; } } for (int index = 0; index < barrenCount; index++) { planets.Add(PlanetFactory.GetPlanet(GetPlanetName(systemName, planetCount), new PlanetType(planetTemperature, VolatilesClass.Airless, SubstancesClass.Terra))); planetCount++; } return(planets); }
private static double GasGiantRadiusGeneration() { double radius; if (HelperRandomFunctions.PercentProbableBool(10)) { radius = (double)HelperRandomFunctions.GetRandomInt(bigGasPlanetMinRadius, bigGasPlanetMaxRadius); } else if (HelperRandomFunctions.PercentProbableBool(20)) { radius = (double)HelperRandomFunctions.GetRandomInt(mediumGasPlanetMinRadius, bigGasPlanetMinRadius); } else { radius = (double)HelperRandomFunctions.GetRandomInt(smallGasPlanetMinRadius, mediumGasPlanetMinRadius); } return(radius); }
private static double RockyPlanetRadiusGeneration() { double radius; if (HelperRandomFunctions.PercentProbableBool(8)) { radius = (double)HelperRandomFunctions.GetRandomInt(bigPlanetMinRadius, bigPlanetMaxRadius); } else if (HelperRandomFunctions.PercentProbableBool(15)) { radius = (double)HelperRandomFunctions.GetRandomInt(mediumPlanetMinRadius, bigPlanetMinRadius); } else { radius = (double)HelperRandomFunctions.GetRandomInt(smallPlanetMinRadius, mediumPlanetMinRadius); } return(radius); }
/// <summary> /// Генерирует обитаемые планеты системы /// </summary> /// <param name="systemName"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> /// <param name="planetCount"> /// Счетчик планет системы /// </param> /// <param name="stars"> /// Коллекция <see cref="Star"/> системы /// </param> private static List <Planet> GetHabitablePlanets(string systemName, ref int planetCount, List <Star> stars) { LuminosityClass systemStarClass = stars[0].LumClass; List <Planet> planets = new List <Planet>(); if (systemStarClass == LuminosityClass.G || systemStarClass == LuminosityClass.K || systemStarClass == LuminosityClass.F) { int habitablePlanetCount = HelperRandomFunctions.GetRandomInt(minHabitableCount, maxHabitableCount + 1); for (int index = 0; index < habitablePlanetCount; index++) { planets.Add(GetHabitablePlanet(GetPlanetName(systemName, planetCount), planetCount, systemStarClass)); planetCount++; } } return(planets); }
/// <summary> /// Генерирует одну обитаемую планету /// </summary> /// <param name="systemName"> /// Имя звездной системы, в которой находятся генерируемые планеты /// </param> private static HabitablePlanet GetHabitablePlanet(string planetName, int planetCount, LuminosityClass mainStarClass) { int probabilityIndex = HelperRandomFunctions.GetRandomInt(1, maxPercents + 1); PlanetType planetType; if (probabilityIndex >= 80) { planetType = new PlanetType(TemperatureClass.Temperate, VolatilesClass.Marine, SubstancesClass.Terra); } else if (probabilityIndex >= 60) { planetType = new PlanetType(TemperatureClass.Cool, VolatilesClass.Marine, SubstancesClass.Terra); } else { planetType = new PlanetType(TemperatureClass.Cool, VolatilesClass.Desertic, SubstancesClass.Terra); } return(PlanetFactory.GetHabitablePlanet(planetName, planetType)); }
private static double GetRandomResourceMultiplier() { return(HelperRandomFunctions.GetRandomDouble() * 2); }