Esempio n. 1
0
        public decimal GetMatchWinPercentage(Tournament tournament, Player player, int? roundNumber = null)
        {
            var achieved = GetMatchPoints(tournament, player, roundNumber);

            var maximum = tournament
                .GetPlayerMatches(player, roundNumber)
                .Count() * MatchWin;

            if(maximum == 0)
                return 0.33m;

            var rawPercentage = achieved / (decimal)maximum;

            // Match win percentage is capped at 0.33 on the low end
            return Math.Max(0.33m, rawPercentage);
        }
Esempio n. 2
0
        public static IEnumerable <Game> GetPlayerGames(this Tournament tournament, Player player, int?roundNumber = null)
        {
            if (tournament == null)
            {
                return(null);
            }

            if (player == null)
            {
                return(null);
            }

            return(tournament
                   .GetPlayerMatches(player, roundNumber)
                   .SelectMany(match => match.Games));
        }
Esempio n. 3
0
 public int GetMatchPoints(Tournament tournament, Player player, int? roundNumber = null)
 {
     return tournament
         .GetPlayerMatches(player, roundNumber)
         .Select(match => new PlayerStats(
             wins: match.Games.Where(game => game.Winner == player).Count(),
             losses: match.Games.Where(game => game.Winner != player && game.Winner != null).Count(),
             draws: match.Games.Where(game => game.Winner == player).Count()
         ))
         .Select(stats => stats.Wins > stats.Losses
             ? MatchWin
             : stats.Wins == stats.Losses
                 ? MatchDraw
                 : MatchLoss)
         .Sum();
 }
Esempio n. 4
0
        public static IEnumerable <Player> GetPlayerOpponents(this Tournament tournament, Player player, int?roundNumber = null)
        {
            if (tournament == null)
            {
                return(null);
            }

            if (player == null)
            {
                return(null);
            }

            return(tournament
                   .GetPlayerMatches(player, roundNumber)
                   .SelectMany(match => match.Players)
                   .Except(new[] { player })
                   .Distinct());
        }