diff --git a/DiceProbabilities/DiceProbabilitesPrinter/Program.cs b/DiceProbabilities/DiceProbabilitesPrinter/Program.cs index a2c9afc..9d28364 100644 --- a/DiceProbabilities/DiceProbabilitesPrinter/Program.cs +++ b/DiceProbabilities/DiceProbabilitesPrinter/Program.cs @@ -1,4 +1,13 @@ using DiceProbabilities; -Console.WriteLine(DiceRollProbability.RollFourPickTwoPickTwoAgainOdds()); +string input = Console.ReadLine(); +while (input != "") +{ + + List? inputtedOptions = input?.Split(',').ToList(); + float odds = RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(inputtedOptions); + Console.WriteLine(odds); + input = Console.ReadLine(); +} + diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll index 6afb7da..d0dd18b 100644 Binary files a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll and b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.dll differ diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe index 7f5bc66..bd8a0d8 100644 Binary files a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe and b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilitesPrinter.exe differ diff --git a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll index 9d17202..c67c4a1 100644 Binary files a/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll and b/DiceProbabilities/DiceProbabilitesPrinter/bin/Debug/net9.0/DiceProbabilities.dll differ diff --git a/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs b/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs index 4786421..1c50aca 100644 --- a/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs +++ b/DiceProbabilities/DiceProbabilities/RollFourSumTwo.cs @@ -11,7 +11,7 @@ namespace DiceProbabilities {"=", .6296f }, {"2", .1319f}, {"3", .2330f}, - {"4", 3557f}, + {"4", .3557f}, {"5", .4475f}, {"6", .5610f}, {"7", .6435f}, diff --git a/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll index 919def5..c67c4a1 100644 Binary files a/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll and b/DiceProbabilities/DiceProbabilities/bin/Debug/netstandard2.0/DiceProbabilities.dll differ diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll index 919def5..c67c4a1 100644 Binary files a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll and b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DiceProbabilities.dll differ diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll index a4713b1..ed28e94 100644 Binary files a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll and b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.dll differ diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe index c62ad19..26dc6e1 100644 Binary files a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe and b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapConsolePrinter.exe differ diff --git a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll index 2245729..ca1b8cc 100644 Binary files a/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll and b/DungeonMapGenerator/DungeonMapConsolePrinter/bin/Debug/net9.0/DungeonMapGenerator.dll differ diff --git a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs index 86bf5f4..8a4287a 100644 --- a/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs +++ b/DungeonMapGenerator/DungeonMapGenerator/DungeonLockPopulator.cs @@ -7,11 +7,11 @@ namespace DungeonMapGenerator { public static class DungeonLockPopulator { - private const float ACCEPTABLE_ERROR = .1319f; + private const float ACCEPTABLE_ERROR = .02f; public static void PopulateLocksOfDungeon(DungeonMap dungeon) { Random random = new Random(); - float desiredSuccessChance = .80f; + float desiredSuccessChance = .995f; List currentRooms = dungeon.GetEntranceRooms(); HashSet seenRooms = new HashSet(currentRooms); @@ -21,12 +21,14 @@ namespace DungeonMapGenerator int entranceRoomLock = 1; foreach (Room entranceRoom in currentRooms) { - entranceRoom.Lock = new Lock((entranceRoomLock + 1.ToString())); + entranceRoomLock += 1; + entranceRoom.Lock = new Lock((entranceRoomLock.ToString())); } while (currentRooms.Count > 0) { List locklessRooms = new List(); + List alreadyLockedRooms = new List(); List adjacentRooms = new List(); // Get all adjacent rooms that haven't been locked at @@ -42,24 +44,30 @@ namespace DungeonMapGenerator } } - // Get the odds of locks already set. + // Sort locked and not locked rooms foreach (Room adjacentRoom in adjacentRooms.ToList()) { - List odds = new List(); if (adjacentRoom.Lock != null) { - odds.Add(adjacentRoom.Lock.GetOdds()); + alreadyLockedRooms.Add(adjacentRoom); } else { locklessRooms.Add(adjacentRoom); } } + + // Get locks of locked rooms + List pregeneratedLocks = new List(); + foreach (Room room in alreadyLockedRooms) + { + pregeneratedLocks.Add(room.Lock); + } if (locklessRooms.Count > 0) { // Add locks to the rooms with odds adding to within the difficulty range - List locks = GenerateLocks(locklessRooms.Count, desiredSuccessChance); + List locks = GenerateLocks(pregeneratedLocks, locklessRooms.Count, desiredSuccessChance); for (int i = 0; i < locklessRooms.Count; i++) { locklessRooms[i].Lock = locks[i]; @@ -70,10 +78,10 @@ namespace DungeonMapGenerator } } - private static List GenerateLocks(int numLocks, float successChance) + private static List GenerateLocks(List pregeneratedLocks, int numLocks, float successChance) { List locks = new List(); - if (FindCombination(locks, numLocks, successChance, Lock.PossibleLocks)) + if (FindCombination(pregeneratedLocks, locks, numLocks, successChance, Lock.PossibleLocks)) { return locks; } @@ -81,11 +89,13 @@ namespace DungeonMapGenerator return null; } - private static bool FindCombination(List generatedLocks, int numLocks, float successChance, List lockOptions) + private static bool FindCombination(List pregeneratedLocks, List generatedLocks, int numLocks, float successChance, List lockOptions) { if (generatedLocks.Count == numLocks) { - List locksAsStrings = generatedLocks.Select(_lock => _lock.GetLock()).ToList(); + List allLocks = new List(pregeneratedLocks); + allLocks.AddRange(generatedLocks); + List locksAsStrings = allLocks.Select(_lock => _lock.GetLock()).ToList(); // Return true if given the current locks the chance of being able to open one is close to difficulty float probalityOfAtleastOneUnlocking = RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(locksAsStrings); @@ -94,7 +104,7 @@ namespace DungeonMapGenerator } Shuffle(lockOptions); - + foreach (Lock _lock in lockOptions.ToList()) { // if adding the lock won't bring us over the threshold difficulty. @@ -103,7 +113,7 @@ namespace DungeonMapGenerator if (RollFourSumTwo.GetProbalityOfAtleastOneUnlocking(locksAsStrings) <= successChance) { generatedLocks.Add(new Lock(_lock.GetLock())); - if (FindCombination(generatedLocks, numLocks, successChance, lockOptions)) + if (FindCombination(pregeneratedLocks, generatedLocks, numLocks, successChance, lockOptions)) { return true; } diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll index 919def5..c67c4a1 100644 Binary files a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll and b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DiceProbabilities.dll differ diff --git a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll index 2245729..ca1b8cc 100644 Binary files a/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll and b/DungeonMapGenerator/DungeonMapGenerator/bin/Debug/netstandard2.0/DungeonMapGenerator.dll differ