public CsgoCalculatorResult(CsgoCalculatorResultBuilder builder)
 {
     FirstTeamName = builder.FirstTeamName;
     SecondTeamName = builder.SecondTeamName;
     FirstTeamId = builder.FirstTeamId;
     SecondTeamId = builder.SecondTeamId;
     Maps = builder.Maps;
     FirstTeamChance = builder.FirstTeamChance;
 }
Exemple #2
0
        //TODO: Вычислять значения очков команд и матчей с помощью ладдера.
        private CsgoCalculatorResult ConstructResult()
        {
            int firstTeamId = Teams.First(t => t.Name == FirstTeamName).Id;
            int secondTeamId = Teams.First(t => t.Name == SecondTeamName).Id;

            int firstTeamLadderPoints = Teams.Find(t => t.Id == firstTeamId).Points;
            int secondTeamLadderPoints = Teams.Find(t => t.Id == secondTeamId).Points;

            int firstTeamPoints = GetFirstTeam().MapStats.Sum(m => m.Points)
                + GetFirstTeam().Points;

            int secondTeamPoints = GetSecondTeam().MapStats.Sum(m => m.Points)
                + GetSecondTeam().Points;

            /*firstTeamPoints += Convert.ToInt32(((float)firstTeamPoints / 4f)
                * ((float)firstTeamLadderPoints / (float)secondTeamLadderPoints));

            secondTeamPoints += Convert.ToInt32(((float)secondTeamPoints / 4f)
                * ((float)secondTeamPoints / (float)firstTeamPoints));*/

            int firstTeamMapPointsSum = GetFirstTeam().MapStats
                .Sum(m => MapPull.Contains(m.Map) ? m.Points : 0);

            int secondTeamMapPointsSum = GetSecondTeam().MapStats
                .Sum(m => MapPull.Contains(m.Map) ? m.Points : 0);

            firstTeamPoints += firstTeamMapPointsSum;
            secondTeamPoints += secondTeamMapPointsSum;

            float firstTeamChance =
                (float)Math.Round((float)firstTeamPoints
                / ((float)firstTeamPoints + (float)secondTeamPoints), 2) * 100f;

            CsgoCalculatorResultBuilder builder = new CsgoCalculatorResultBuilder();

            builder.FirstName(FirstTeamName)
                .SecondName(SecondTeamName)
                .FirstId(firstTeamId)
                .SecondId(secondTeamId)
                .FirstChance(firstTeamChance);

            foreach (string map in MapPull)
            {
                float chance = (float)Math.Round((float)GetFirstTeam().MapStats
                    .Find(m => m.Map == map).Points /
                    ((float)GetSecondTeam().MapStats
                    .Find(m => m.Map == map).Points
                    + (float)GetFirstTeam().MapStats
                    .Find(m => m.Map == map).Points), 2) * 100f;

                builder.AddMap(map, chance);
            }

            //TODO: Пофиксить на расчет очков с правильных карт, а не со всех. DONE.
            //TODO: Возможно уменьшить влияние ладдерного коэффициента с трети до четверти. DONE.

            //TODO: Учитывать ладдерную позицию во времени во время расчета очков карт и командд.

            return builder.Build();
        }