public void GivenFiveLevelFivePlayersWithDeadlyRank_WhenInvoked_ThenGeneratesAllPossibleChallengeRatingOutcomes() { // Arrange var encounterRequest = new EncounterGenerationRequest() { Players = new List <int>() { 5, 5, 5, 5 }, Difficulty = Difficulty.Deadly, Rank = 'D', MaximumAdjustedExperience = 8400, MinimumAdjustedExperience = 3600 }; var challengeRatingCalculator = new ChallengeRatingCalculator(encounterRequest); HashSet <KeyValuePair <string, int> > test = new HashSet <KeyValuePair <string, int> >() { new KeyValuePair <string, int>("CR2", 3) }; // Act var result = challengeRatingCalculator.GenerateChallengeRatingOutcomes(); // Assert Assert.IsTrue(result); }
public void GivenValidNumberOfPlayers_WhenEvaluated_ReturnsValidEncountersFilteredByNumberOfPlayers() { // Arrange var encounterRequest = new EncounterGenerationRequest() { Players = new List <int>() { 5, 5, 5, 5 }, Difficulty = Difficulty.Deadly, Rank = 'D', MaximumAdjustedExperience = 8400, MinimumAdjustedExperience = 3600 }; var challengeRatingCalculator = new ChallengeRatingCalculator(encounterRequest); HashSet <string> testMatchups = new HashSet <string>() { "CR4 3", "CR1/4 20" }; // Act var result = challengeRatingCalculator.TransformIntoValidEncounters(testMatchups).ToList(); // Assert Assert.IsTrue(result.Count() == 1); Assert.IsTrue(result.Any(encounter => encounter.Monsters.ContainsKey("CR4") && encounter.Monsters["CR4"] == 3)); }
static void Main(string[] args) { var encounterGenerationRequest = new EncounterGenerationRequest(); for (int i = 0; i < args.Length; i++) { int playerLevel; if (args[i].ToLower() == "-p" && int.TryParse(args[i + 1], out playerLevel)) { if (playerLevel < 1 || playerLevel > 20) { using (TextWriter writer = new StreamWriter(Console.OpenStandardError())) { writer.WriteLine($"Unrecognized flag {args[i]}"); } return; } encounterGenerationRequest.Players.Add(playerLevel); i++; } else if (args[i].ToLower() == "-d") { encounterGenerationRequest.Difficulty = args[i + 1].ToLower() == "hard" ? Difficulty.Hard : Difficulty.Deadly; i++; } else if (args[i].ToLower() == "-r") { encounterGenerationRequest.Rank = args[i + 1][0]; i++; } else if (args[i].ToLower() == "-min") { if (int.TryParse(args[i + 1], out var minimum)) { encounterGenerationRequest.MinimumAdjustedExperience = minimum; i++; continue; } using (TextWriter writer = new StreamWriter(Console.OpenStandardError())) { writer.WriteLine($"You must provide a valid minimum adjusted experience value"); } } else if (args[i].ToLower() == "-max") { if (int.TryParse(args[i + 1], out var maximum)) { encounterGenerationRequest.MaximumAdjustedExperience = maximum; i++; continue; } using (TextWriter writer = new StreamWriter(Console.OpenStandardError())) { writer.WriteLine($"You must provide a valid maximum adjusted experience value"); } } else { using (TextWriter writer = new StreamWriter(Console.OpenStandardError())) { writer.WriteLine($"Unrecognized flag {args[i]}"); return; } } } if (encounterGenerationRequest.Players.Count == 0) { using (TextWriter writer = new StreamWriter(Console.OpenStandardError())) { writer.WriteLine($"You must have at least one player. Use the -p flag, followed by a number, like so..."); writer.WriteLine("whatever.exe -p 3 -p 4 -p 4 -p 3"); } return; } Console.WriteLine("Congrats, you managed not to screw everything up so far..."); Console.WriteLine("Here's what you entered, double check it: "); Console.WriteLine($"Difficulty: {(encounterGenerationRequest.Difficulty == Difficulty.Hard ? "Hard" : "Deadly")}"); Console.WriteLine($"Rank: {encounterGenerationRequest.Rank}"); Console.WriteLine($"Number of players: {encounterGenerationRequest.Players.Count} ({string.Join(' ', encounterGenerationRequest.Players.Select(p => $"Lv{p}"))})"); Console.WriteLine("Press any key to continue...or press N to cancel"); var moveForward = false; #if RELEASE var response = Console.Read(); moveForward = Convert.ToChar(response) != 'N' || Convert.ToChar(response) != 'n'; #endif #if DEBUG moveForward = true; #endif try { if (moveForward) { var challengeRatingCalculator = new ChallengeRatingCalculator(encounterGenerationRequest); var result = challengeRatingCalculator.GenerateChallengeRatingOutcomes(); if (result) { Console.WriteLine("Alrighty, copy your macro in macro.txt, and import it into roll20."); } else { Console.WriteLine("Wow, you managed to break it somehow, send Dylan the exact command you ran."); } } } catch (System.Exception e) { Console.WriteLine($"Something went wrong, send the file error.txt to Dylan"); using (var writer = new StreamWriter(System.IO.File.OpenWrite(Constants.OutputPath("error.txt")))) { writer.WriteLine($"Message: {e.Message}"); writer.WriteLine($"Stack Trace: {e.StackTrace}"); } Console.ReadKey(); } }
public void GivenFivePlayers_WhenCalculated_ReturnsExpectedAXP() { // Arrange var encounterRequest = new EncounterGenerationRequest() { Players = new List <int>() { 5, 5, 5, 5 }, Difficulty = Difficulty.Deadly, Rank = 'D', MaximumAdjustedExperience = 8400, MinimumAdjustedExperience = 3600 }; var challengeRatingCalculator = new ChallengeRatingCalculator(encounterRequest); // CR = Key, Quantity = value var inputOne = new Dictionary <string, int>() { { "CR1", 1 } }; var inputTwo = new Dictionary <string, int>() { { "CR1", 2 } }; var inputThreeToSix = new Dictionary <string, int>() { { "CR1", 3 } }; var inputSevenToTen = new Dictionary <string, int>() { { "CR5", 2 }, { "CR2", 5 } }; var inputElevenToFourteen = new Dictionary <string, int>() { { "CR1", 11 } }; var inputFifteenOrMore = new Dictionary <string, int>() { { "CR1", 15 } }; var expectedOne = 200; var expectedTwo = 200 * 2 * 1.5; var expectedThreeToSix = 200 * 3 * 2; var expectedSevenToTen = 5850 * 2.5; var expectedElevenToFourteen = 200 * 11 * 3; var expectedFifteenOrMore = 200 * 15 * 4; // Act var resultOne = challengeRatingCalculator.EvaluateAXP(inputOne); var resultTwo = challengeRatingCalculator.EvaluateAXP(inputTwo); var resultThreeToSix = challengeRatingCalculator.EvaluateAXP(inputThreeToSix); var resultSevenToTen = challengeRatingCalculator.EvaluateAXP(inputSevenToTen); var resultElevenToFourteen = challengeRatingCalculator.EvaluateAXP(inputElevenToFourteen); var resultFifteenOrMore = challengeRatingCalculator.EvaluateAXP(inputFifteenOrMore); // Assert Assert.AreEqual(expectedOne, resultOne, "one monster range multiplier invalid calculation"); Assert.AreEqual(expectedTwo, resultTwo, "two monster range multiplier invalid calculation"); Assert.AreEqual(expectedThreeToSix, resultThreeToSix, "three to six monster range multiplier invalid calculation"); Assert.AreEqual(expectedSevenToTen, resultSevenToTen, "seven to ten monster range multiplier invalid calculation"); Assert.AreEqual(expectedElevenToFourteen, resultElevenToFourteen, "eleven to fourteen monster range multiplier invalid calculation"); Assert.AreEqual(expectedFifteenOrMore, resultFifteenOrMore, "fifteen or more monster range multiplier invalid calculation"); }