Пример #1
0
        private UserRank GetUserRank(string username, out int rank)
        {
            List <UserRank> userRanks = GetUserRanks();
            UserRank        user      = userRanks.FirstOrDefault(x => x.Username.ToLower().Equals(username.ToLower()));

            rank = userRanks.IndexOf(user) + 1;
            return(user);
        }
Пример #2
0
        private List <UserRank> GetRankings(List <Match> allMatches)
        {
            Hashtable hashtable = new Hashtable();

            foreach (Match match in allMatches)
            {
                List <string> matchPlayers = match.Team1.Players.Concat(match.Team2.Players).ToList();
                foreach (string player in matchPlayers)
                {
                    if (!hashtable.ContainsKey(player))
                    {
                        hashtable.Add(player, new UserRank());
                    }

                    UserRank userRank = (UserRank)hashtable[player];
                    userRank.Played   = userRank.Played + 1;
                    hashtable[player] = userRank;
                }

                List <string> score = match.Score.Split(':').ToList();

                bool hasTeam1Won         = int.Parse(score[0]) > int.Parse(score[1]);
                int  team1GoalDifference = int.Parse(score[0]) - int.Parse(score[1]);

                bool hasTeam2Won         = int.Parse(score[1]) > int.Parse(score[0]);
                int  team2GoalDifference = int.Parse(score[1]) - int.Parse(score[0]);

                UpdateScoreTables(hashtable, match.Team1.Players, hasTeam1Won, team1GoalDifference, match.Date);
                UpdateScoreTables(hashtable, match.Team2.Players, hasTeam2Won, team2GoalDifference, match.Date);
            }

            List <UserRank> userRanks = new List <UserRank>();

            foreach (string key in hashtable.Keys)
            {
                UserRank temp = (UserRank)hashtable[key];
                temp.Username = key;
                userRanks.Add(temp);
            }
            userRanks = userRanks
                        .OrderByDescending(x => x.QualityScore)
                        .ThenByDescending(x => x.GoalDifference)
                        //.OrderBy(x => x.GoalDifference)
                        .ToList();
            return(userRanks);
        }
Пример #3
0
        private Hashtable UpdateScoreTables(Hashtable hashtable, List <string> players, bool won, int goalDifference, DateTime matchDate)
        {
            foreach (string player in players)
            {
                UserRank userRank = (UserRank)hashtable[player];
                if (userRank.Trend == null)
                {
                    userRank.Trend = new List <string>();
                }

                if (userRank.Rating == 0)
                {
                    userRank.Rating = 100;
                }

                if (won)
                {
                    userRank.Won = userRank.Won + 1;
                    userRank.Trend.Add("W");
                    userRank.Rating = userRank.Rating + 3;

                    if (goalDifference >= 3)
                    {
                        userRank.Rating = userRank.Rating + 1;
                    }
                    if (goalDifference >= 6)
                    {
                        userRank.Rating = userRank.Rating + 1;
                    }
                    if (goalDifference >= 9)
                    {
                        userRank.Rating = userRank.Rating + 1;
                    }
                }
                else
                {
                    userRank.Lost = userRank.Lost + 1;
                    userRank.Trend.Add("L");
                    userRank.Rating = userRank.Rating - 1;

                    if (goalDifference >= 3)
                    {
                        userRank.Rating = userRank.Rating - 1;
                    }
                    if (goalDifference >= 6)
                    {
                        userRank.Rating = userRank.Rating - 1;
                    }
                    if (goalDifference >= 9)
                    {
                        userRank.Rating = userRank.Rating - 1;
                    }
                }

                if (matchDate >= DateTime.Now.AddDays(-5))
                {
                    if (won)
                    {
                        userRank.Scores[0].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[0].Count++;
                }
                else if (matchDate >= DateTime.Now.AddDays(-10))
                {
                    if (won)
                    {
                        userRank.Scores[1].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[1].Count++;
                }
                else if (matchDate >= DateTime.Now.AddDays(-15))
                {
                    if (won)
                    {
                        userRank.Scores[2].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[2].Count++;
                }
                else if (matchDate >= DateTime.Now.AddDays(-20))
                {
                    if (won)
                    {
                        userRank.Scores[3].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[3].Count++;
                }
                else if (matchDate >= DateTime.Now.AddDays(-25))
                {
                    if (won)
                    {
                        userRank.Scores[4].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[4].Count++;
                }
                else
                {
                    if (won)
                    {
                        userRank.Scores[5].Sum += 10 * (1 + (0.25 * goalDifference));
                    }
                    userRank.Scores[5].Count++;
                }
                userRank.GoalDifference = userRank.GoalDifference + goalDifference;
                hashtable[player]       = userRank;
            }
            return(hashtable);
        }