Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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));
        }