public void HeistSnitchBailsAndBlackmailed() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(sara); chee.Decision.GoOnHeist = true; chee.Decision.PlayerToBlackmail = harv; sara.Decision.GoOnHeist = true; sara.Decision.PlayerToBlackmail = harv; harv.Decision.GoOnHeist = false; harv.Decision.ReportPolice = true; var cheeStarting = chee.NetWorth; var saraStarting = sara.NetWorth; var harvStarting = harv.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.IsTrue(chee.Decision.BlackmailReward > 0); Assert.AreEqual(cheeStarting + heist.TotalReward / 2 + chee.Decision.BlackmailReward, chee.NetWorth); Assert.AreEqual(saraStarting + heist.TotalReward / 2 + sara.Decision.BlackmailReward, sara.NetWorth); Assert.AreEqual(harvStarting - chee.Decision.BlackmailReward * 2, harv.NetWorth); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(sara.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.FindingHeist); }
public void HeistSuccessBlackmailFail() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); ron.Decision.GoOnHeist = true; ron.Decision.PlayerToBlackmail = yc; yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; var startingNetworth = yc.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(ron.Decision.JailTerm, ron.YearsLeftInJail); Assert.IsTrue(ron.Decision.JailFine > 0); Assert.AreEqual(heist.TotalReward / 2, ron.Decision.HeistReward); Assert.AreEqual(startingNetworth + ron.Decision.HeistReward - ron.Decision.JailFine, ron.NetWorth); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(startingNetworth + heist.TotalReward / 2, yc.NetWorth); }
public void HeistArrestedBlackmailSuccess() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); ron.Decision.GoOnHeist = true; ron.Decision.ReportPolice = true; ron.Decision.PlayerToBlackmail = yc; ron.MinJailSentence = 2; ron.MaxJailSentence = 3; yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; yc.LastBetrayedYear = 5; // After the snitch window yc.BetrayalCount = 1; var startingNetworth = yc.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); // Assert that ron has been sentenced twice Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.IsTrue(ron.Decision.JailTerm < 4); Assert.IsTrue(ron.Decision.JailFine == 0); Assert.IsTrue(ron.Decision.BlackmailReward > 0); Assert.AreEqual(startingNetworth + 10 /*Snitch reward*/ + ron.Decision.BlackmailReward, ron.NetWorth); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(startingNetworth - yc.Decision.JailFine - ron.Decision.BlackmailReward, yc.NetWorth); }
public void HeistSuccessBlackmailSuccess() { var heist = new Heist("12345", 5 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); heist.AddPlayer(sara); heist.AddPlayer(chee); heist.AddPlayer(harv); ron.Decision.GoOnHeist = true; ron.Decision.PlayerToBlackmail = yc; yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; yc.LastBetrayedYear = 5; // Within window of snitching yc.BetrayalCount = 2; var startingNetworth = yc.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(heist.TotalReward / 5, ron.Decision.HeistReward); Assert.AreEqual(startingNetworth + ron.Decision.HeistReward + ron.Decision.BlackmailReward, ron.NetWorth); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(startingNetworth + heist.TotalReward / 5 - ron.Decision.BlackmailReward, yc.NetWorth); var originalBlackmailRewardWithSuccessfulHeist = ron.Decision.BlackmailReward; // Ensure that if the heist didn't happen on a successful blackmail, the reward is much less heist = new Heist("12345", 5 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); heist.AddPlayer(sara); heist.AddPlayer(chee); heist.AddPlayer(harv); yc.NetWorth = startingNetworth; ron.NetWorth = startingNetworth; chee.Decision.GoOnHeist = false; sara.Decision.GoOnHeist = false; harv.Decision.GoOnHeist = false; ron.Decision = new HeistPlayer.HeistDecision(); ron.Decision.GoOnHeist = true; ron.Decision.PlayerToBlackmail = yc; yc.Decision = new HeistPlayer.HeistDecision(); yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; yc.LastBetrayedYear = 5; // Within window of snitching yc.BetrayalCount = 2; heist.Resolve(); Assert.IsTrue(ron.Decision.BlackmailReward < originalBlackmailRewardWithSuccessfulHeist); this.VerifyNonBlankFate(heist); Assert.AreEqual(0, ron.Decision.HeistReward); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(startingNetworth + ron.Decision.BlackmailReward, ron.NetWorth); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(startingNetworth - ron.Decision.BlackmailReward, yc.NetWorth); }
public void ChainBlackmailSuccess() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); heist.AddPlayer(chee); ron.Decision.GoOnHeist = true; ron.Decision.PlayerToBlackmail = yc; ron.LastBetrayedYear = 9; ron.BetrayalCount = 2; yc.Decision.GoOnHeist = true; yc.Decision.PlayerToBlackmail = ron; yc.LastBetrayedYear = 9; yc.BetrayalCount = 2; var startingNetworth = yc.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(ron.NetWorth, yc.NetWorth); // Blackmails are resolved equally Assert.AreEqual(yc.NetWorth, chee.NetWorth); }
public void DefenseAndFailedBlackmail() { var heist = new Heist("12345", 2 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(ron); heist.AddPlayer(yc); ron.Decision.GoOnHeist = true; ron.Decision.PlayerToBlackmail = yc; ron.LastBetrayedYear = 4; // Out of snitch window ron.BetrayalCount = 2; yc.Decision.GoOnHeist = true; yc.Decision.PlayerToBlackmail = ron; yc.LastBetrayedYear = 4; // Out of snitch window yc.BetrayalCount = 2; var startingNetworth = yc.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.IsTrue(ron.Decision.JailFine > 0); Assert.AreEqual(startingNetworth + heist.TotalReward / 2 - ron.Decision.JailFine, ron.NetWorth); Assert.IsTrue(ron.Decision.JailTerm > 0); Assert.IsTrue(yc.Decision.JailFine > 0); Assert.AreEqual(startingNetworth + heist.TotalReward / 2 - yc.Decision.JailFine, yc.NetWorth); Assert.IsTrue(yc.Decision.JailTerm > 0); }
public void BlackmailMissHeistSuccess() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(sara); chee.Decision.GoOnHeist = true; chee.Decision.PlayerToBlackmail = harv; sara.Decision.GoOnHeist = true; harv.Decision.GoOnHeist = false; var cheeStarting = chee.NetWorth; var saraStarting = sara.NetWorth; var harvStarting = harv.NetWorth; harv.BetrayalCount = 1; harv.LastBetrayedYear = 9; heist.Resolve(); this.VerifyNonBlankFate(heist); var reward = heist.TotalReward / 2; Assert.AreEqual(cheeStarting + reward, chee.NetWorth); Assert.AreEqual(saraStarting + reward, sara.NetWorth); Assert.AreEqual(harvStarting, harv.NetWorth); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(sara.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.FindingHeist); }
public void HeistSuccess() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(ron); chee.Decision.GoOnHeist = true; harv.Decision.GoOnHeist = true; ron.Decision.GoOnHeist = false; var cheeStarting = chee.NetWorth; var harvStarting = harv.NetWorth; var ronStarting = ron.NetWorth; var reward = heist.TotalReward / 2; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(ronStarting, ron.NetWorth); Assert.AreEqual(cheeStarting + reward, chee.NetWorth); Assert.AreEqual(harvStarting + reward, harv.NetWorth); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.FindingHeist); }
private void VerifyNonBlankFate(Heist heist) { foreach (var player in heist.Players.Values) { Assert.IsTrue(player.Decision.FateTitle.Length > 0, "{0}'s Fate Title is empty.", player.Name); Assert.IsTrue(player.Decision.FateDescription.Length > 0, "{0}'s Fate Decision is empty.", player.Name); } }
public void WriteHeistName(Heist heist) { Console.Write(" "); Console.Write(heist.Name); if (heist.IsStealthable) { ConsoleUtils.WriteInColor(() => Console.Write("*"), ConsoleColor.DarkCyan); } }
public void PerformHeist(Heist heist) { this.totalExpenses += heist.expenses; foreach (char item in heist.loot) { switch (item) { case '%': this.totalEarnings += jewelPrice; break; case '$': this.totalEarnings += goldUnitPrice; break; default: break; } } }
public void HeistAbandonBlackmailFail() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(sara); heist.AddPlayer(ron); heist.AddPlayer(yc); chee.Decision.GoOnHeist = true; chee.Decision.PlayerToBlackmail = yc; harv.Decision.GoOnHeist = false; sara.Decision.GoOnHeist = false; ron.Decision.GoOnHeist = false; yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; // This should result in a FAILED blackmail heist.Resolve(); this.VerifyNonBlankFate(heist); var startingGold = sara.NetWorth; Assert.AreEqual(startingGold, harv.NetWorth); Assert.AreEqual(startingGold, sara.NetWorth); Assert.AreEqual(startingGold, ron.NetWorth); Assert.AreEqual(startingGold, yc.NetWorth); // Everyone else is normal - Chee is in jail Assert.IsTrue(chee.Decision.JailFine > 0); Assert.IsTrue(chee.Decision.JailTerm > 0); Assert.AreEqual(chee.Decision.JailTerm, chee.YearsLeftInJail); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(startingGold - chee.Decision.JailFine, chee.NetWorth); Assert.AreEqual(sara.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); }
public void HeistAbandonBlackmailSuccess() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(sara); heist.AddPlayer(ron); heist.AddPlayer(yc); chee.Decision.GoOnHeist = true; chee.Decision.PlayerToBlackmail = yc; harv.Decision.GoOnHeist = false; sara.Decision.GoOnHeist = false; ron.Decision.GoOnHeist = false; yc.Decision.GoOnHeist = true; yc.Decision.ReportPolice = false; yc.LastBetrayedYear = 9; yc.BetrayalCount = 1; // This should result in a SUCCESSFUL blackmail heist.Resolve(); this.VerifyNonBlankFate(heist); var startingGold = sara.NetWorth; Assert.AreEqual(startingGold, harv.NetWorth); Assert.AreEqual(startingGold, sara.NetWorth); Assert.AreEqual(startingGold, ron.NetWorth); Assert.IsTrue(chee.Decision.BlackmailReward > 0); Assert.AreEqual(startingGold + chee.Decision.BlackmailReward, chee.NetWorth); Assert.AreEqual(startingGold - chee.Decision.BlackmailReward, yc.NetWorth); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(sara.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(ron.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(yc.Decision.NextStatus, HeistPlayer.Status.FindingHeist); }
private static ConsoleColor ColorFromDifficulty(Difficulty difficulty, Heist heist, ConsoleColor defaultColor) { switch (difficulty) { case Difficulty.Hard: case Difficulty.Overkill: case Difficulty.Overkill145: case Difficulty.EasyWish: return(ConsoleColor.Red); case Difficulty.Overkill290: case Difficulty.SmWish: return(heist.IsStealthable ? ConsoleColor.Red : ConsoleColor.DarkRed); case Difficulty.Easy: case Difficulty.Normal: return(defaultColor); default: return(defaultColor); } }
public UsingHeist() { ChatMessage = ChatMessageBuilder.Create() .WithChannel(Guid.NewGuid().ToString()) .Build(); MockedContext = new Mock <IApplicationContext>(); MockedRandom = new Mock <Random>(); MockedTwitchClientManager = new Mock <ITwitchClientManager>(); MockedTwitchClient = new Mock <ITwitchClient>(); MockedTwitchClientManager.Setup(x => x.Client).Returns(MockedTwitchClient.Object); Player = new Player() { TwitchUserID = Guid.NewGuid().ToString() }; Sut = new Heist(ChatMessage, MockedRandom.Object, MockedTwitchClientManager.Object); }
public void HeistAbandonSnitchFail() { var heist = new Heist("12345", 3 /*Capacity*/, 10 /*SnitchReward*/, 10 /*Year*/, 5 /*SnitchWindow*/, 0 /*NetworthFudge*/, 60 /*BlackmailReward*/, 20 /*JailFine*/); heist.AddPlayer(chee); heist.AddPlayer(harv); heist.AddPlayer(sara); chee.Decision.GoOnHeist = false; sara.Decision.GoOnHeist = true; sara.Decision.ReportPolice = true; harv.Decision.GoOnHeist = false; harv.Decision.ReportPolice = true; var cheeStarting = chee.NetWorth; var saraStarting = sara.NetWorth; var harvStarting = harv.NetWorth; heist.Resolve(); this.VerifyNonBlankFate(heist); Assert.AreEqual(0, chee.Decision.JailTerm); Assert.IsTrue(sara.Decision.JailTerm > 0); Assert.IsTrue(harv.Decision.JailTerm > 0); Assert.IsTrue(sara.Decision.JailFine > 0); Assert.IsTrue(harv.Decision.JailFine > 0); Assert.AreEqual(cheeStarting, chee.NetWorth); Assert.AreEqual(saraStarting - sara.Decision.JailFine, sara.NetWorth); Assert.AreEqual(harvStarting - harv.Decision.JailFine, harv.NetWorth); Assert.AreEqual(chee.Decision.NextStatus, HeistPlayer.Status.FindingHeist); Assert.AreEqual(sara.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(sara.Decision.JailTerm, sara.YearsLeftInJail); Assert.AreEqual(harv.Decision.NextStatus, HeistPlayer.Status.InJail); Assert.AreEqual(harv.Decision.JailTerm, harv.YearsLeftInJail); }
public HeistStatistic(Heist heist, List <SessionCount> counters) { Heist = heist; Counters = counters; }
public void WriteCounter(int count, Difficulty difficulty, Heist heist) { Writer.Write($"{count},"); }
public void WriteCounter(int count, Difficulty difficulty, Heist heist) { var color = count > 0 ? ConsoleColor.Gray : ColorFromDifficulty(difficulty, heist, ConsoleColor.Gray); ConsoleUtils.WriteInColor(() => Console.Write(count.ToString().PadLeft(4)), color); }
private static void PrintCountForDifficulty(Difficulty difficulty, IDictionary <Difficulty, List <SessionCount> > sessionsByDifficulty, Heist heist, Context context) { var count = GetCountForDifficulty(difficulty, sessionsByDifficulty); context.Formatter.WriteCounter(count, difficulty, heist); }
public void WriteHeistName(Heist heist) { Writer.Write(XlsFriendlyUtils.StringifyString(heist.Name) + ','); }