コード例 #1
0
        private async Task <GameHistory> ComputeNewUserPoints(GameHistory gameHistory)
        {
            var users = new Dictionary <string, User>();

            foreach (var(playerId, player) in gameHistory.Summary.Players)
            {
                users[playerId] = await this.Repository.GetUserById(player.WebsiteId !.Value).ConfigureAwait(false);
            }

            var match = new EloMatch();

            var eloPlayers = gameHistory.Summary.Players.Aggregate(new Dictionary <string, IEloPlayer>(), (acc, kvp) =>
            {
                var user     = users[kvp.Key];
                acc[kvp.Key] = match.AddPlayer(kvp.Value.Rank, user.Points);
                return(acc);
            });

            match.ComputeElos();

            foreach (var(playerId, player) in gameHistory.Summary.Players)
            {
                player.Points      = eloPlayers[playerId].NewElo;
                player.DeltaPoints = eloPlayers[playerId].EloChange;
            }

            return(gameHistory);
        }