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