// TODO: prefer "places" for this and not male/female public string RegionName(IClimate climate, CoreEnums.Word nameType) { // I could put this on one line but I think it'd be less clear string name = Generator.GetName(nameType) + ClimateSwitch(climate); if (Random.Next(0, 4) == 0) name = AffixDemonstrative(name); return name; }
// TODO: prefer "places" for this and not male/female public string RegionNameWithAdjective(IClimate climate, CoreEnums.Word nameType) { GeneralWordGen general = new GeneralWordGen(); string name = Generator.GetName(nameType); if (Random.Next(0, 5) == 0) name = name + " the " + GetAdjective().CapitalizeFirstLetter(); name = name + ClimateSwitch(climate); return name; }
/// <summary> /// Using the list of AvailableFeatures a list of features is built for the final object /// </summary> /// <returns>Returns a list of features</returns> internal static List<IFeatures> PopulateFeatures(CoreEnums.RegionSize size, List<IFeatures> AvailableFeatures) { List<IFeatures> Features = new List<IFeatures>(); // do I need to initialize this?.. int numberOfFeatures = DetermineNumberOfFeatures(size); while (true) { // ERROR: 'System.ArgumentOutOfRangeException' AvailableFeatures.RemoveAt(_Random.Next(0, AvailableFeatures.Count - 1)); if (numberOfFeatures == AvailableFeatures.Count) break; } return AvailableFeatures; }
/// <summary> /// Generate a single deity. /// </summary> /// <param name="ChiefDiety">The chief deity of the pantheon. Will accept a null value if no chief deity exists.</param> /// <param name="prominence">The promince of the deity. Is it a primary, major, or minor deity? Primary will set the ChiefDeity value to null.</param> /// <returns>Returns an IDeity object</returns> public IDeity Generate(IDeity ChiefDiety, CoreEnums.Deity prominence) { IDeity deity = new Deity { Id = Random.Next(0, 78000000), // I need to ensure this is unique (at least until the database is up and running... Name = RandomNameGen(), Description = "DESCRIPTION", ChiefDiety = (prominence == CoreEnums.Deity.Primary) ? null : ChiefDiety, Prominence = prominence, Alignment = (CoreEnums.Alignment)Random.Next(0, 8) }; AnnounceCreation(deity); return deity; }
/// <summary> /// This determines the number of features to be available by the size of the region /// </summary> /// <param name="size">Accepts the size of the region</param> /// <returns>Returns an integer representing the total number of allowable features</returns> private static int DetermineNumberOfFeatures(CoreEnums.RegionSize size) { switch ((int)size) { case 1400000: // VerySmall return _Random.Next(3, 6); case 3200000: // Small return _Random.Next(4, 7); case 4000000: // Moderate return _Random.Next(5, 8); case 5300000: // Large return _Random.Next(6, 9); default: // VeryLarge return _Random.Next(7, 10); } }
private int CalculateContinentSizeKM(CoreEnums.ContinentSize size) { int plusOrMinus = Convert.ToInt32(((double)CoreEnums.ContinentSize.VerySmall * (double).27)); switch ((int)size) { case 7000000: // VerySmall return Random.Next((int)CoreEnums.ContinentSize.VerySmall - plusOrMinus, (int)CoreEnums.ContinentSize.VerySmall + plusOrMinus); case 12000000: // Small return Random.Next((int)CoreEnums.ContinentSize.Small - plusOrMinus, (int)CoreEnums.ContinentSize.Small + plusOrMinus); case 21000000: // Moderate return Random.Next((int)CoreEnums.ContinentSize.Moderate - plusOrMinus, (int)CoreEnums.ContinentSize.Moderate + plusOrMinus); case 37000000: // Large return Random.Next((int)CoreEnums.ContinentSize.Large - plusOrMinus, (int)CoreEnums.ContinentSize.Large + plusOrMinus); default: // VeryLarge return Random.Next((int)CoreEnums.ContinentSize.VeryLarge - plusOrMinus, (int)CoreEnums.ContinentSize.VeryLarge + plusOrMinus); } }
public static ITopography Get(int id, CoreEnums.RegionSize size, IClimate climate) { switch (id) { case 0: return new Highlands(size, climate); case 1: return new Hills(size, climate); case 2: return new Mountains(size, climate); case 3: return new Lowlands(size, climate); case 4: return new Plains(size, climate); case 5: default: return new Valleys(size, climate); } }
// What about an order of 8 for place names? public MarkovNameGenerator(CoreEnums.Word word) { Random = new Random(); int minLength = 4; int baseOrder = ((Random.Next(0, 2) == 1)) ? 4 + 1 : 4 - 1; // 4 seems to be a sweet spot so we mix it up by doing plus or minus 1 switch (Convert.ToInt32(word)) { case 0: // male elf names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\MaleElvishNames.txt", baseOrder, minLength); break; case 1: // female elf names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\FemaleElvishNames.txt", baseOrder, minLength); break; case 2: // elf places NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\ElvishPlaceNames.txt", baseOrder, minLength); break; case 3: // male human names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\MaleHumanNames.txt", baseOrder, minLength); break; case 4: // female human names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\FemaleHumanNames.txt", baseOrder, minLength); break; case 5: // human places NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\HumanPlaceNames.txt", baseOrder, minLength); break; case 6: // male dwarf names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\MaleDwarfNames.txt", baseOrder, minLength); break; case 7: // female dwarf names NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\FemaleDwarfNames.txt", baseOrder, minLength); break; case 8: // dwarven places NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\DwarvenPlaceNames.txt", baseOrder, minLength); break; case 9: // deity names default: NameGenerator(@"C:\Users\Michael\Documents\StoryGenerator\Names\DeityNames.txt", 4, 4); break; } }
public string SingleNameWithAdjective(CoreEnums.Word nameType) { GeneralWordGen general = new GeneralWordGen(); return Generator.GetName(nameType) + " the " + GetAdjective().CapitalizeFirstLetter(); }
public string SingleName(CoreEnums.Word nameType) { return Generator.GetName(nameType); }
public string FirstAndLastNameWithAdjective(CoreEnums.Word firstNameType, CoreEnums.Word lastNameType) { GeneralWordGen general = new GeneralWordGen(); return Generator.GetName(firstNameType) + " " + Generator.GetName(lastNameType) + " the " + GetAdjective().CapitalizeFirstLetter(); }
public string FirstAndLastName(CoreEnums.Word firstNameType, CoreEnums.Word lastNameType) { return Generator.GetName(firstNameType) + " " + Generator.GetName(lastNameType); }
/// <summary> /// Primary constructor for generating a topography with appropriate settings /// </summary> /// <param name="size">Accepts the size of the region the topography belongs to</param> public Plains(CoreEnums.RegionSize size, IClimate climate) { AvailableFeatures = PopulateAvailableFeatures(); Features = PopulateFinalFeatures(climate); CorrespondingTopography = PopulateCorrespondingTopography(); }
private string GetName(IRace race, CoreEnums.Gender gender) { switch (race.GetType().Name.ToLower()) { case "elves": return DiceRollForNames((gender == CoreEnums.Gender.Female) ? CoreEnums.Word.ElfFemale : CoreEnums.Word.ElfMale); case "dwarves": return DiceRollForNames((gender == CoreEnums.Gender.Female) ? CoreEnums.Word.DwarfFemale : CoreEnums.Word.DwarfMale); case "human": default: return DiceRollForNames((gender == CoreEnums.Gender.Female) ? CoreEnums.Word.HumanFemale : CoreEnums.Word.HumanMale); } }
// keep surnames??? private string DiceRollForNames(CoreEnums.Word race) { int value = Random.Next(0, 10); if (value >= 0 && value <= 3) // 4 { return Names.SingleName(race); } else if (value > 3 && value <= 6) // 3 chances { return Names.SingleNameWithAdjective(race); // maybe adjectives should only be given with achievements } else if (value > 6 && value <= 8) // 2 chances { return Names.FirstAndLastName(race, race); } else // 1 chance { return Names.FirstAndLastNameWithAdjective(race, race); // maybe adjectives should only be given with achievements } }