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); }
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)); }
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(); }
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()); }