public int GetGamePoints(Tournament tournament, Player player, int? roundNumber = null) { return tournament .GetPlayerGames(player, roundNumber) .Select(game => new PlayerStats( wins: game.Winner == player ? 1 : 0, losses: game.Winner != player && game.Winner != null ? 1 : 0, draws: game.Winner == null ? 1 : 0 )) .Aggregate(0, (sum, stats) => sum + (stats.Wins * GameWin + stats.Draws * GameDraw + stats.Losses * GameLoss)); }
public decimal GetGameWinPercentage(Tournament tournament, Player player, int? roundNumber = null) { var achieved = GetGamePoints(tournament, player, roundNumber); var maximum = tournament .GetPlayerGames(player, roundNumber) .Count() * GameWin; if(maximum == 0) return 0.33m; var rawPercentage = achieved / (decimal)maximum; // Game win percentage is capped at 0.33 on the low end return Math.Max(0.33m, rawPercentage); }