public void UpdateScore(BallType ballType)
        {
            if (ballType == BallType.Wicket)
            {
                BatsmanStat incomingBat = this.BattingStats.FirstOrDefault(x => !x.IsOnField && !x.IsOut);
                BatsmanStat outgoingBat = this.BattingStats.First(x => x.IsOnStrike);
                outgoingBat.Out();
                if (incomingBat != null)
                {
                    incomingBat.In();
                }

                this.BowlingStats.First(x => x.IsOnStrike).Update(BallType.Wicket, 0);
            }
            if (ballType == BallType.NoBall || ballType == BallType.Wide)
            {
                this.BowlingStats.First(x => x.IsOnStrike).Update(ballType, 1);
            }

            if (IsCurrentOverFinished())
            {
                RotateStrike();
                BowlerChange();
            }
        }
        public void RotateStrike()
        {
            BatsmanStat bat1 = this.BattingStats.First(x => x.IsOnStrike);
            BatsmanStat bat2 = this.BattingStats.First(x => !x.IsOnStrike && x.IsOnField);

            bat1.ToggleOnStrike();
            bat2.ToggleOnStrike();
        }
        public void DisplayBattingScoreCard()
        {
            Console.WriteLine("Batting Scorecard for Team : {0}", this.Team1.TeamName);
            Console.WriteLine("{0,-20}{1}{2,10}{3,10}{4,10}{5,15}", Constants.PlayerName, Constants.Score, Constants.Fours, Constants.Sixes, Constants.Balls, "Status");

            for (int i = 0; i < BattingStats.Count; i++)
            {
                BatsmanStat batsman = BattingStats[i];
                Console.WriteLine("{0}{1,-10}{2,10}{3,10}{4,10}{5,10}{6,15}", batsman.PlayerName, GetHighlighter(batsman), batsman.Score, batsman.Count4, batsman.Count6, batsman.BallsFaced, batsman.IsOut ? "Out" : "Not Out");
            }

            // Log Ball By Ball
            Console.WriteLine();
        }
        public string GetHighlighter(BatsmanStat batsman)
        {
            if (!batsman.IsOut)
            {
                if (batsman.IsOnStrike)
                {
                    return("**");
                }
                if (batsman.IsOnField)
                {
                    return("*");
                }
            }

            return(String.Empty);
        }
        public void CreateBattingOrder(Team team)
        {
            for (int i = 0; i < team.Players.Count; i++)
            {
                BatsmanStat batsman = new BatsmanStat(team.Players[i].PlayerName, 0, 0, 0, 0, false, false, false);
                if (i == 0)
                {
                    batsman.IsOnStrike = true;
                    batsman.IsOnField  = true;
                }
                if (i == 1)
                {
                    batsman.IsOnField = true;
                }

                this.BattingStats.Add(batsman);
            }
        }