public BattingResult GetBattingResult(BattingStint batter, PitchingStint pitcher, bool isPitcherTired) { var random = new Random(); var randomResult = random.Next(0, 2); if (randomResult == 0) { return(GetBatterBattingResult(batter, random)); } return(GetPitcherBattingResult(pitcher, random, isPitcherTired)); }
private BattingResult GetPitcherBattingResult(PitchingStint pitcher, Random random, bool isPitcherTired) { var randomResult = random.Next(0, 1001); if (pitcher == null) { pitcher = PitchingStintHelperFunctions.CreatePitchingStintForNonPitcher(); } var fatigueWildPitches = 0; var fatigueWalks = 0; var fatigueHitBatters = 0; var fatigueHits = 0; var fatigueHomeRuns = 0; if (isPitcherTired) { fatigueWildPitches = pitcher.WildPitches / 3; fatigueWalks = pitcher.Walks / 3; fatigueHitBatters = pitcher.HitBatters / 3; fatigueHits = pitcher.WildPitches / 3; fatigueHomeRuns = pitcher.HomeRuns / 3; } var totalOutcomes = pitcher.BattersFaced + pitcher.WildPitches + pitcher.Balks + fatigueWalks + fatigueHitBatters + fatigueHits + fatigueHomeRuns + fatigueWildPitches; var successThreshold = ((double)pitcher.Balks / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.Balk); } successThreshold += (((double)pitcher.WildPitches + fatigueWildPitches) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.WildPitch); } successThreshold += ((((double)pitcher.Hits + fatigueHits) - (pitcher.HomeRuns + fatigueHomeRuns)) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { randomResult = random.Next(0, 101); if (randomResult <= 1) { return(BattingResult.Triple); } if (randomResult <= 25) { return(BattingResult.Double); } return(BattingResult.Single); } successThreshold += (((double)pitcher.HitBatters + fatigueHitBatters) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.HitByPitch); } successThreshold += (((double)pitcher.HomeRuns + fatigueHomeRuns) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.HomeRun); } successThreshold += (((double)pitcher.Strikeouts) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.Strikeout); } successThreshold += (((double)pitcher.Walks + fatigueWalks) / totalOutcomes) * 1000; if (randomResult <= successThreshold) { return(BattingResult.Walk); } return(GetFieldedByRandomPositionResult(random)); }