Ejemplo n.º 1
0
        private static void AddTieBreakPoint(TieBreakPoint tieBreakPoint, TieBreak tieBreak)
        {
            TieBreakPoint newTieBreakPoint = new TieBreakPoint()
            {
                FirstPlayerPoint  = tieBreakPoint.FirstPlayerPoint,
                SecondPlayerPoint = tieBreakPoint.SecondPlayerPoint,
                TieBreak          = tieBreakPoint.TieBreak,
                TieBreakId        = tieBreakPoint.TieBreakId
            };

            tieBreak.TieBreakPoints.Add(newTieBreakPoint);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Add point to the first player of match by the given Id
        /// </summary>
        /// <param name="matchId"></param>
        /// <returns> Task<LiveREsultViewModel> </returns>
        public async Task <LiveResultViewModel> AddFirstPlayerPoint(int matchId)
        {
            Set           set           = null;
            Game          game          = null;
            Point         point         = new Point();
            TieBreakPoint tieBreakPoint = null;
            TieBreak      tieBreak      = null;

            Match match = await GetCurrentMatch(matchId);

            set  = match.Sets.ToList().LastOrDefault();
            game = set.Games.ToList().LastOrDefault();
            var lastPoint = game.Points.ToList().LastOrDefault();

            PointValue(game, point, lastPoint);

            if (!match.IsFinished)
            {
                if (!set.HasTieBreak)
                {
                    point.FirstPlayerPoints++;

                    if (((point.FirstPlayerPoints - 2 >= point.SecondPlayerPoints) && point.SecondPlayerPoints >= 3) ||
                        (point.FirstPlayerPoints == 4 && point.SecondPlayerPoints <= 2))
                    {
                        point.FirstPlayerPoints--;
                        //game.Points.Add(point);

                        game.Player         = match.FirstPlayer;
                        game.PlayerId       = match.FirstPlayerId;
                        game.IsGameFinished = true;

                        set.FirstPlayerGames++;
                        set.Games.Add(game);


                        if ((set.FirstPlayerGames >= 6 && set.SecondPlayerGames <= 4) ||
                            set.FirstPlayerGames == 7 && set.SecondPlayerGames == 5)
                        {
                            match.FirstPlayerSets++;
                            set.Player        = match.FirstPlayer;
                            set.PlayerId      = match.FirstPlayerId;
                            set.IsSetFinished = true;

                            if (match.FirstPlayerSets == 2)
                            {
                                match.IsFinished = true;
                                match.IsActive   = false;
                                match.FirstPlayer.Win++;
                                match.SecondPlayer.Loses++;
                                PointsToZero(point);
                                //TODO Add Winner
                            }
                            else
                            {
                                CreateGameAndSet(match);
                            }
                        }
                        else if (set.FirstPlayerGames == 6 && set.SecondPlayerGames == 6)
                        {
                            set.HasTieBreak = true;

                            set.TieBreak = new TieBreak
                            {
                                Set            = set,
                                SetId          = set.Id,
                                TieBreakPoints = new List <TieBreakPoint>()
                                {
                                    new TieBreakPoint()
                                }
                            };

                            PointsToZero(point);
                        }
                        else
                        {
                            AddNewGame(set);
                        }
                    }
                    else if (point.FirstPlayerPoints == 4 && point.SecondPlayerPoints == 4)
                    {
                        point.FirstPlayerPoints  = 3;
                        point.SecondPlayerPoints = 3;

                        game.Points.Add(point);
                    }
                    else
                    {
                        game.Points.Add(point);
                    }
                }
                else
                {
                    tieBreak = await this.context
                               .TieBreaks
                               .Include(t => t.TieBreakPoints)
                               .FirstOrDefaultAsync(t => t.SetId == set.Id);

                    tieBreakPoint = tieBreak.TieBreakPoints.ToList().LastOrDefault(p => p.TieBreakId == tieBreak.Id);

                    tieBreakPoint.FirstPlayerPoint++;

                    if ((tieBreakPoint.FirstPlayerPoint == 7 && tieBreakPoint.SecondPlayerPoint <= 5) ||
                        ((tieBreakPoint.FirstPlayerPoint - 2 == tieBreakPoint.SecondPlayerPoint) && tieBreakPoint.SecondPlayerPoint > 5))
                    {
                        set.FirstPlayerGames++;
                        match.FirstPlayerSets++;
                        set.IsSetFinished = true;
                        set.Player        = match.FirstPlayer;
                        set.PlayerId      = match.FirstPlayerId;
                        match.Sets.Add(set);

                        if (match.Sets.Where(s => s.Player.Id == set.PlayerId).Count() == 2)
                        {
                            match.IsActive   = false;
                            match.IsFinished = true;
                            match.SecondPlayer.Win++;
                            match.FirstPlayer.Loses++;
                        }
                        else
                        {
                            CreateGameAndSet(match);
                        }
                    }

                    AddTieBreakPoint(tieBreakPoint, tieBreak);
                }
            }

            await this.context.SaveChangesAsync();

            var r = mapper.Map <LiveResultViewModel>(match);

            return(r);
        }