public Star(LehmerPRNG lehmer) { this.lehmer = lehmer; this.Name = GenerateName(); var type = lehmer.NextChoice(starTypes, starTypes.Select(st => st.Prevalence)); this.TypeOfStar = type.Type; this.Radius = lehmer.NextDouble(type.MinRadius, type.MaxRadius); var hasPlanets = lehmer.NextBool(CHANCE_OF_PLANETS); if (!hasPlanets) { return; } Planets = new List <Planet>(); var numPlanets = lehmer.NextInt(1, 10); var currentDisanceInAU = lehmer.NextDouble(0.5, 4); for (int i = 0; i < numPlanets; i++) { Planets.Add(new Planet(lehmer, currentDisanceInAU)); currentDisanceInAU += lehmer.NextDouble(0.5, 1.5) * (i + 1) * 0.5; } }
public Planet(LehmerPRNG lehmer, double distanceFromStar) { this.lehmer = lehmer; DistanceFromStar = distanceFromStar; HasRings = lehmer.NextBool(RING_CHANCE); var candidates = planetTypes.Where(pt => pt.MaxDistance >= distanceFromStar && pt.MinDistance <= distanceFromStar); var planetType = lehmer.NextChoice(candidates); Type = planetType.Type; Radius = lehmer.NextDouble(planetType.MinRadius, planetType.MaxRadius); var hasMoons = lehmer.NextBool(MOON_CHANCE); if (!hasMoons) { return; } Moons = new List <Moon>(); var numMoons = lehmer.NextInt(1, 4); var currentDisanceInPU = lehmer.NextDouble(0.5, 4); for (int i = 0; i < numMoons; i++) { Moons.Add(new Moon(lehmer, currentDisanceInPU, Radius)); currentDisanceInPU += lehmer.NextDouble(0.5, 1.5) * (i + 1) * 0.5; } }
private string GenerateName() { StringBuilder sb = new StringBuilder(); int length = lehmer.NextInt(3, 11); bool isConsonant = lehmer.NextBool(); for (int i = 0; i < length; i++) { sb.Append(isConsonant ? NextConsonant() : NextVowel()); isConsonant = !isConsonant; } return(CultureInfo.InvariantCulture.TextInfo.ToTitleCase(sb.ToString())); }