public bool UndoTeamScore(int matchId, int battingTeamId, CalcBall value)
        {
            if (matchId == 0 || battingTeamId == 0 || value == null)
            {
                return(false);
            }
            var match = MatchesTable.GetMatch(matchId);

            match.MatchComplete   = false;
            match.WinningTeamName = null;
            match.Comments        = null;
            if (match.HomeTeamId == battingTeamId && match.HomeTeamBalls > 0)
            {
                match.HomeTeamRuns    = match.HomeTeamRuns - value.RunsGiven;
                match.HomeTeamWickets = match.HomeTeamWickets - value.WicketsTaken;
                match.HomeTeamBalls   = match.HomeTeamBalls - value.BallBowled;
                match.HomeTeamWides   = match.HomeTeamWides - value.Wides;
                match.HomeTeamNoBalls = match.HomeTeamNoBalls - value.Noballs;
                match.HomeTeamByes    = match.HomeTeamByes - value.Byes;
                match.HomeTeamLegByes = match.HomeTeamLegByes - value.LegByes;
            }
            else if (match.AwayTeamId == battingTeamId && match.AwayTeamBalls > 0)
            {
                match.AwayTeamRuns            = match.AwayTeamRuns - value.RunsGiven;
                match.AwayTeamWickets         = match.AwayTeamWickets - value.WicketsTaken;
                match.AwayTeamBalls           = match.AwayTeamBalls - value.BallBowled;
                match.AwayTeamWides           = match.AwayTeamWides - value.Wides;
                match.AwayTeamNoBalls         = match.AwayTeamNoBalls - value.Noballs;
                match.AwayTeamByes            = match.AwayTeamByes - value.Byes;
                match.AwayTeamLegByes         = match.AwayTeamLegByes - value.LegByes;
                match.AwayTeamInningsComplete = false;
            }

            return(MatchesTable.UpdateMatch(match));;
        }
        public bool UpdateBowlerThisBall(int matchId, int bowlingTeamId, CalcBall value)
        {
            var val = false;

            // Handle when calc ball lost value
            if (value == null || string.IsNullOrEmpty(value.BowlerName))
            {
                return(val);
            }

            // Handle when team innings complete
            var match = Access.MatchService.GetMatch(matchId);

            if ((match.AwayTeam.Id == bowlingTeamId && match.HomeTeam.InningsComplete) ||
                (match.HomeTeam.Id == bowlingTeamId && match.AwayTeam.InningsComplete))
            {
                return(val);
            }

            var currentPlayers = GetPlayersPerTeamPerMatch(bowlingTeamId, matchId);

            var player = currentPlayers.Where(p => p.Name == value.BowlerName).FirstOrDefault();

            player.RunsGiven   = player.RunsGiven + value.RunsGiven;
            player.BallsBowled = player.BallsBowled + value.BallBowled;
            player.Wickets     = player.Wickets + value.WicketsTaken;

            if (Helper.ConvertBallstoOvers(player.Thisoverballs).Split('.')[1] == "0") // Reset every last ball previous over
            {
                player.Thisoverruns = false;
            }

            player.Thisoverballs = player.Thisoverballs + value.BallBowled;
            player.Thisoverruns  = player.Thisoverruns ? player.Thisoverruns :
                                   (value.RunsTaken + value.Wides + value.Noballs == 0) ? false : true;
            player.Maiden = player.Maiden + ((Helper.ConvertBallstoOvers(player.Thisoverballs).Split('.')[1] == "0" && !player.Thisoverruns) ? 1 : 0);

            player.Wides   = player.Wides + value.Wides;
            player.NoBalls = player.NoBalls + value.Noballs;

            val = PlayersTable.UpdatePlayer(player);

            //Catch or Stumping
            if (val && !string.IsNullOrEmpty(value.Fielder))
            {
                var fielder = currentPlayers.Where(p => p.Name == value.Fielder).FirstOrDefault();

                fielder.Catches   = fielder.Catches + (value.BatsmanHowOut.Contains($"c {value.Fielder}") ? 1 : 0);
                fielder.Stumpings = fielder.Stumpings + (value.BatsmanHowOut.Contains($"st †{value.Fielder}") ? 1 : 0);
                val = PlayersTable.UpdatePlayer(fielder);
            }

            return(val);
        }
Beispiel #3
0
 public BallService(Ball ball, int teamno)
 {
     CalcBall = new CalcBall(ball);
     if (teamno == 1)
     {
         Access.TeamOneBalls.Add(CalcBall);
     }
     else
     {
         Access.TeamTwoBalls.Add(CalcBall);
     }
 }
        public bool UpdateBatsmanThisBall(int matchId, int battingTeamId, CalcBall value)
        {
            var val = false;

            // Handle when calc ball lost value
            if (value == null || string.IsNullOrEmpty(value.BatsmanName))
            {
                return(val);
            }

            // Handle when team innings complete
            var match = Access.MatchService.GetMatch(matchId);

            if ((match.HomeTeam.Id == battingTeamId && match.HomeTeam.InningsComplete) ||
                (match.AwayTeam.Id == battingTeamId && match.AwayTeam.InningsComplete))
            {
                return(val);
            }

            var currentPlayers = GetPlayersPerTeamPerMatch(battingTeamId, matchId);

            // Active Batsman
            var player = currentPlayers.Where(p => p.Name == value.BatsmanName).FirstOrDefault();

            player.RunsTaken   = player.RunsTaken + value.RunsTaken;
            player.BallsPlayed = player.BallsPlayed + value.BallsPlayed;
            if (value.RunsTaken == 4)
            {
                player.Fours = player.Fours + 1;
            }
            if (value.RunsTaken == 6)
            {
                player.Sixes = player.Sixes + 1;
            }
            player.HowOut = value.BatsmanHowOut;

            val = PlayersTable.UpdatePlayer(player);

            // Update is runner out
            if (val && !string.IsNullOrEmpty(value.RunnerBatsman) && value.RunnerHowOut.Contains("runout"))
            {
                var runner = currentPlayers.Where(p => p.Name == value.RunnerBatsman).FirstOrDefault();
                runner.HowOut = value.RunnerHowOut;
                val           = PlayersTable.UpdatePlayer(runner);
            }

            return(val);
        }
        public bool UndoBatsmanLastBall(int matchId, int battingTeamId, CalcBall value)
        {
            var val = false;

            // Handle when calc ball lost value
            if (value == null || string.IsNullOrEmpty(value.BatsmanName))
            {
                return(val);
            }

            var currentPlayers = GetPlayersPerTeamPerMatch(battingTeamId, matchId);

            //Active Batsman
            var player = currentPlayers.Where(p => p.Name == value.BatsmanName).FirstOrDefault();

            if (player.BallsPlayed > 0)
            {
                player.RunsTaken   = player.RunsTaken - value.RunsTaken;
                player.BallsPlayed = player.BallsPlayed - value.BallsPlayed;
                if (value.RunsTaken == 4)
                {
                    player.Fours = player.Fours - 1;
                }
                if (value.RunsTaken == 6)
                {
                    player.Sixes = player.Sixes - 1;
                }
                player.HowOut = "not out";
                val           = PlayersTable.UpdatePlayer(player);
            }

            //Runner
            if (val && !string.IsNullOrEmpty(value.RunnerBatsman))
            {
                var runner = currentPlayers.Where(p => p.Name == value.RunnerBatsman).FirstOrDefault();
                runner.HowOut = "not out";
                val           = PlayersTable.UpdatePlayer(runner);
            }

            return(val);
        }
Beispiel #6
0
        private void UndoScore(object sender, EventArgs e)
        {
            var currentMatch = Access.MatchService.GetMatch(MatchId);

            CalcBall undoBall = null;

            if (currentMatch.HomeTeam.Id == BattingteamId)
            {
                if (currentMatch.HomeTeam.InningsComplete || Access.TeamOneBalls.Count <= 0)
                {
                    Toast.MakeText(this, $"{currentMatch.HomeTeam.Name} innings is complete or not started.", ToastLength.Long).Show();
                    return;
                }
                else
                {
                    undoBall = Access.TeamOneBalls[Access.TeamOneBalls.Count - 1];
                    Access.TeamOneBalls.RemoveAt(Access.TeamOneBalls.Count - 1);
                }
            }
            else
            {
                if (currentMatch.AwayTeam.InningsComplete || Access.TeamTwoBalls.Count <= 0)
                {
                    Toast.MakeText(this, $"{currentMatch.AwayTeam.Name} innings is complete or not started.", ToastLength.Long).Show();
                    return;
                }
                else
                {
                    undoBall = Access.TeamTwoBalls[Access.TeamTwoBalls.Count - 1];
                    Access.TeamTwoBalls.RemoveAt(Access.TeamTwoBalls.Count - 1);
                }
            }

            if (Access.PlayerService.UndoBatsmanLastBall(MatchId, BattingteamId, undoBall) &&
                Access.PlayerService.UndoBowlerLastBall(MatchId, BowlingteamId, undoBall))
            {
                Access.MatchService.UndoTeamScore(MatchId, BattingteamId, undoBall);
            }
            GotoCurrentMatch();
        }
        public bool UndoBowlerLastBall(int matchId, int bowlingTeamId, CalcBall value)
        {
            var val = false;

            // Handle when calc ball lost value
            if (value == null || string.IsNullOrEmpty(value.BowlerName))
            {
                return(val);
            }

            var currentPlayers = GetPlayersPerTeamPerMatch(bowlingTeamId, matchId);
            var player         = currentPlayers.Where(p => p.Name == value.BowlerName).FirstOrDefault();

            if (player.BallsBowled > 0)
            {
                // Check last 6 balls if batsman is scored if score on 6th ball undo else dont do it
                var match = Access.MatchService.GetMatch(matchId);
                var team  = (match.HomeTeam.Id == bowlingTeamId) ? 2 : 1;
                var balls = (team == 1) ? Access.TeamOneBalls : Access.TeamTwoBalls;
                player.Thisoverruns = false;
                int i = 6;
                foreach (var b in balls.Where(p => p.BowlerName == player.Name).AsEnumerable().Reverse())
                {
                    if (i == 0)
                    {
                        break;
                    }
                    if (b.RunsTaken > 0 || b.Wides > 0 || b.Noballs > 0)
                    {
                        player.Thisoverruns = true;
                        break;
                    }
                    i = i - (b.BallBowled == 1 ? 1 : 0);
                }

                if (player.Maiden > 0)
                {
                    player.Maiden = player.Maiden - ((Helper.ConvertBallstoOvers(player.Thisoverballs).Split('.')[1] == "0" && !player.Thisoverruns) ? 1 : 0);
                }

                player.Thisoverballs = player.Thisoverballs - value.BallBowled;
                player.RunsGiven     = player.RunsGiven - value.RunsGiven;
                player.BallsBowled   = player.BallsBowled - value.BallBowled;
                player.Wickets       = player.Wickets - value.WicketsTaken;
                player.Wides         = player.Wides - value.Wides;
                player.NoBalls       = player.NoBalls - value.Noballs;
                val = PlayersTable.UpdatePlayer(player);
            }

            //Catch or Stumping
            if (val && !string.IsNullOrEmpty(value.Fielder))
            {
                var fielder = currentPlayers.Where(p => p.Name == value.Fielder).FirstOrDefault();

                fielder.Catches   = fielder.Catches - (value.BatsmanHowOut.Contains($"c {value.Fielder}") ? 1 : 0);
                fielder.Stumpings = fielder.Stumpings - (value.BatsmanHowOut.Contains($"st †{value.Fielder}") ? 1 : 0);
                val = PlayersTable.UpdatePlayer(fielder);
            }

            return(val);
        }
        public bool UpdateTeamScore(int matchId, int battingTeamId, CalcBall value)
        {
            var match = MatchesTable.GetMatch(matchId);

            if (match.HomeTeamId == battingTeamId && !match.HomeTeamInningsComplete)
            {
                match.HomeTeamRuns    = match.HomeTeamRuns + value.RunsGiven;
                match.HomeTeamWickets = match.HomeTeamWickets + value.WicketsTaken;
                match.HomeTeamBalls   = match.HomeTeamBalls + value.BallBowled;
                match.HomeTeamWides   = match.HomeTeamWides + value.Wides;
                match.HomeTeamNoBalls = match.HomeTeamNoBalls + value.Noballs;
                match.HomeTeamByes    = match.HomeTeamByes + value.Byes;
                match.HomeTeamLegByes = match.HomeTeamLegByes + value.LegByes;

                // Home team completed innings
                if (match.HomeTeamBalls >= match.TotalOvers * 6)
                {
                    match.HomeTeamInningsComplete = true;
                }

                //Match complete
                if (match.AwayTeamInningsComplete && (match.HomeTeamInningsComplete || match.HomeTeamRuns > match.AwayTeamRuns))
                {
                    match.MatchComplete           = true;
                    match.HomeTeamInningsComplete = true;

                    // Home team successfully chased
                    if (match.HomeTeamRuns > match.AwayTeamRuns)
                    {
                        match.WinningTeamName = match.HomeTeamName;
                        match.Comments        = match.WinningTeamName + " won by " +
                                                (Access.PlayerService.GetPlayersPerTeamPerMatch(match.HomeTeamId, match.Id).Count - match.HomeTeamWickets) + " wickets";
                    }
                    // Home team lost
                    else if (match.HomeTeamRuns < match.AwayTeamRuns)
                    {
                        var diffruns = match.AwayTeamRuns - match.HomeTeamRuns;
                        match.Comments = match.AwayTeamName + " won by " + diffruns + " runs";
                    }
                    // Game Tie
                    else if (match.HomeTeamRuns == match.AwayTeamRuns)
                    {
                        match.Comments = "Game is tie";
                    }
                }
            }
            else if (match.AwayTeamId == battingTeamId && !match.AwayTeamInningsComplete)
            {
                match.AwayTeamRuns    = match.AwayTeamRuns + value.RunsGiven;
                match.AwayTeamWickets = match.AwayTeamWickets + value.WicketsTaken;
                match.AwayTeamBalls   = match.AwayTeamBalls + value.BallBowled;
                match.AwayTeamWides   = match.AwayTeamWides + value.Wides;
                match.AwayTeamNoBalls = match.AwayTeamNoBalls + value.Noballs;
                match.AwayTeamByes    = match.AwayTeamByes + value.Byes;
                match.AwayTeamLegByes = match.AwayTeamLegByes + value.LegByes;

                // Away team completed innings
                if (match.AwayTeamBalls >= match.TotalOvers * 6)
                {
                    match.AwayTeamInningsComplete = true;
                }

                //Match complete
                if (match.HomeTeamInningsComplete && (match.AwayTeamInningsComplete || match.HomeTeamRuns < match.AwayTeamRuns))
                {
                    match.MatchComplete           = true;
                    match.AwayTeamInningsComplete = true;

                    // Away team successfully chased
                    if (match.HomeTeamRuns < match.AwayTeamRuns)
                    {
                        match.WinningTeamName = match.AwayTeamName;
                        match.Comments        = match.WinningTeamName + " won by " +
                                                (Access.PlayerService.GetPlayersPerTeamPerMatch(match.AwayTeamId, match.Id).Count - match.AwayTeamWickets) + " wickets";
                    }
                    // Away team lost
                    else if (match.HomeTeamRuns > match.AwayTeamRuns)
                    {
                        var diffruns = match.HomeTeamRuns - match.AwayTeamRuns;
                        match.Comments = match.HomeTeamName + " won by " + diffruns + " runs";
                    }
                    // Game Tie
                    else if (match.HomeTeamRuns == match.AwayTeamRuns)
                    {
                        match.Comments = "Game is tie";
                    }
                }
            }

            return(MatchesTable.UpdateMatch(match));
        }
Beispiel #9
0
        private void UpdateScore(object sender, EventArgs e)
        {
            if (!mFielder_Keeper.Enabled)
            {
                ThisBall.Fielder = null;
            }

            // Extras one
            if (ThisBall.Wide == 1)
            {
                ThisBall.Wide = Convert.ToInt32(mExtra1Runs.SelectedItem.ToString());
            }
            else if (ThisBall.NoBall == 1)
            {
                ThisBall.NoBall = Convert.ToInt32(mExtra1Runs.SelectedItem.ToString());
            }

            // Extras two
            if (ThisBall.Byes == 1)
            {
                ThisBall.Byes = Convert.ToInt32(mExtra2Runs.SelectedItem.ToString());
            }
            else if (ThisBall.LegByes == 1)
            {
                ThisBall.LegByes = Convert.ToInt32(mExtra2Runs.SelectedItem.ToString());
            }

            var calcball = new CalcBall(ThisBall);

            if (Match.HomeTeam.Id == BattingteamId)
            {
                Access.TeamOneBalls.Add(calcball);
            }
            else
            {
                Access.TeamTwoBalls.Add(calcball);
            }

            //Update score
            if (Access.PlayerService.UpdateBatsmanThisBall(MatchId, BattingteamId, calcball) &&
                Access.PlayerService.UpdateBowlerThisBall(MatchId, BowlingteamId, calcball))
            {
                Access.MatchService.UpdateTeamScore(MatchId, BattingteamId, calcball);
            }

            Match = Access.MatchService.GetMatch(MatchId);
            // Current innings is complete
            if ((Match.HomeTeam.Id == BattingteamId && Match.HomeTeam.InningsComplete) ||
                (Match.AwayTeam.Id == BattingteamId && Match.AwayTeam.InningsComplete))
            {
                var currentInningsComplete = new Android.App.AlertDialog.Builder(this);
                currentInningsComplete.SetTitle("Current Innings is Complete.");
                var teamname = Match.HomeTeam.Id == BattingteamId ? Match.HomeTeam.Name : Match.AwayTeam.Name;
                var runs     = Match.HomeTeam.Id == BattingteamId ? Match.HomeTeam.Runs : Match.AwayTeam.Runs;
                var wicktes  = Match.HomeTeam.Id == BattingteamId ? Match.HomeTeam.Wickets : Match.AwayTeam.Wickets;
                currentInningsComplete.SetMessage($"{teamname} is scored {runs} for {wicktes} wickets.");
                currentInningsComplete.SetPositiveButton("Ok",
                                                         (senderAlert, args) =>
                {
                    currentInningsComplete.Dispose();
                    if (Match.Complete)
                    {
                        MatchComplete($"Congratulations, {Match.Comments}");
                    }
                    else
                    {
                        GotoCurrentMatch();
                    }
                });
                currentInningsComplete.Show();
            }
            // Match is complete
            else if (Match.Complete)
            {
                MatchComplete($"Congratulations, { Match.Comments}");
            }
            // One or less wickets left. Press 'Complete' to match complete or 'No, Continue' to add new batsman.
            else if (Access.PlayerService.GetPlayersPerTeamPerMatch(BattingteamId, Match.Id).Where(o => o.HowOut == "not out").Count() <= 1)
            {
                var wicketsgone = new Android.App.AlertDialog.Builder(this);
                wicketsgone.SetTitle("All Out");
                wicketsgone.SetMessage("One or less wickets left. Press 'Innings Over' if current innings is complete, 'No, Continue' to add new batsman.");
                wicketsgone.SetPositiveButton("Innings Over", (senderAlert, args) =>
                {
                    wicketsgone.Dispose();
                    if (Match.HomeTeam.Id == BattingteamId)
                    {
                        Match.HomeTeam.InningsComplete = true;
                    }
                    else
                    {
                        Match.AwayTeam.InningsComplete = true;
                    }
                    if (Match.HomeTeam.InningsComplete && Match.AwayTeam.InningsComplete)
                    {
                        Match.Complete = true;
                        var diffruns   = Match.HomeTeam.Runs - Match.AwayTeam.Runs;
                        if (diffruns == 0)
                        {
                            Match.Comments = "Game is tie";
                        }
                        else
                        {
                            Match.WinningTeamName = (diffruns > 0) ? Match.HomeTeam.Name : Match.AwayTeam.Name;
                            Match.Comments        = Match.WinningTeamName + " won by " + Math.Abs(diffruns) + " runs";
                        }
                        MatchComplete($"Congratulations, { Match.Comments}");
                    }
                    else
                    {
                        GotoCurrentMatch();
                    }
                    Access.MatchService.UpdateMatch(Match);
                });
                wicketsgone.SetNegativeButton("No, Continue", (senderAlert, args) => {
                    wicketsgone.Dispose();
                    Intent intent = new Intent(this.BaseContext, typeof(AddDeletePlayerActivity));
                    intent.PutExtra("MatchId", MatchId);
                    intent.PutExtra("BattingTeamId", BattingteamId);
                    intent.PutExtra("BowlingTeamId", BowlingteamId);
                    intent.PutExtra("SelectedTeam", "Batting");
                    StartActivity(intent);
                });
                wicketsgone.Show();
            }
            else
            {
                GotoCurrentMatch();
            }
        }