/// <summary> /// Execute the at bat. /// </summary> public void Execute() { int roll = Dice.Roll2d10(); GamePlayResult res = null; try { if (roll <= this.pitcher.PitchingStats.CurrentControl) { PitchResults theResult = this.pitcher.PitchingStats.PitchResults[roll - 1]; res = GamePlayResultFactory.GetResult(this, theResult); } else { BattingResults theResult = this.batter.BattingStats.BattingResults[roll - 1]; res = GamePlayResultFactory.GetResult(this, theResult); } this.inning.Game.Announcer.AnnounceToConsole(String.Format($"And {res.ControllingPlayer} is in control of the at bat.")); this.pitcher.PitchingStatistics.BattersFaced++; this.result = res; this.batter.IsBatting = false; OnGamePlayResult(res); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// Check if result is a hit. /// </summary> /// <returns><c>true</c>, if hit was ised, <c>false</c> otherwise.</returns> /// <param name="result">bool</param> public static bool IsHit(BattingResults result) { switch (result) { case (Base.BattingResults.Single): return(true); case (Base.BattingResults.Double): return(true); case (Base.BattingResults.Triple): return(true); case (Base.BattingResults.HR): return(true); default: return(false); } }
/// <summary> /// Gets the result. /// </summary> /// <returns>GamePlayResult</returns> /// <param name="currentAtBat">AtBat</param> /// <param name="result">GamePlayResult</param> public static GamePlayResult GetResult(AtBat currentAtBat, BattingResults result) { switch (result) { case BattingResults.HBP: return(new HitByPitch(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.BB: return(new Walk(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.K: return(new Strikeout(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.GO: return(new GroundOut(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.FO: int roll = Dice.Roll2d10(); if (roll <= (int)((double)currentAtBat.Batter.BattingStats.PowerRating * 1.5)) { return(new DeepFlyOut(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); //Check for deep fly out } return(new Flyout(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.Single: return(new Single(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.Double: return(new Double(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.Triple: return(new Triple(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); case BattingResults.HR: return(new HomeRun(currentAtBat.Batter, currentAtBat.Pitcher, currentAtBat.Batter)); } return(null); }
public void TestPitcherVersusBatterOutcomes() { ryan.PitchingStats = ps; p.BattingStats = bs; ryan.PitchingStats.CurrentControl -= p.BattingStats.ControlModifier; Assert.IsTrue(ryan.PitchingStats.Control == 75); Assert.IsTrue(ryan.PitchingStats.CurrentControl == 65); Dictionary <PitchResults, int> frequencyPitcherControl = new Dictionary <PitchResults, int>(); Dictionary <BattingResults, int> frequencyBatterControl = new Dictionary <BattingResults, int>(); int pitcherControl = 0; int hits = 0; for (int i = 0; i < AT_BATS; i++) { int roll = Dice.Roll2d10(); if (roll <= ryan.PitchingStats.Control) { pitcherControl++; roll = Dice.Roll2d10(); PitchResults key = ryan.PitchingStats.PitchResults[roll - 1]; if (!frequencyPitcherControl.ContainsKey(key)) { frequencyPitcherControl.Add(key, 1); } else { frequencyPitcherControl[key] += 1; } if (BattingStats.IsHit(key) == true) { hits++; } } else { roll = Dice.Roll2d10(); BattingResults key2 = p.BattingStats.BattingResults[roll - 1]; if (!frequencyBatterControl.ContainsKey(key2)) { frequencyBatterControl.Add(key2, 1); } else { frequencyBatterControl[key2] += 1; } if (BattingStats.IsHit(key2) == true) { hits++; } } } Dictionary <PitchResults, int> .Enumerator cursor = frequencyPitcherControl.GetEnumerator(); Console.WriteLine("The pitcher remained control {0} out of {1} at bats [{2:P}]", pitcherControl, AT_BATS, ((double)pitcherControl / (double)AT_BATS)); while (cursor.MoveNext()) { Console.WriteLine(cursor.Current.ToString()); } Console.WriteLine("Results when the batter retained control"); Dictionary <BattingResults, int> .Enumerator cursor2 = frequencyBatterControl.GetEnumerator(); while (cursor2.MoveNext()) { Console.WriteLine(cursor2.Current.ToString()); } Console.WriteLine("The batter had a batting average of {0:.000}", ((double)hits / (double)AT_BATS)); }