public IEnumerable <Head2HeadRecord> GetHead2HeadRecords( [FromRoute(Name = "player")] string playerName, [FromRoute(Name = "season")] string seasonName) { var player = PlayerHandler.GetPlayerByName(playerName); var season = SeasonHandler.GetSeason(seasonName); if (player == null || season == null) { return(new Head2HeadRecord[0]); } var games = GameHandler .GetGamesByPlayer(playerName, SortOrder.Descending) .FindAll(g => season.IsActive(g.Created)); var ratings = RatingHandler.GetRatingsByPlayerAndSeason(player, season) .Where(pr => pr.GameId != null) .ToDictionary(pr => pr.GameId); return(games .SelectMany(g => g.Scores.Where(gs => gs.Player.Name != playerName)) .GroupBy(gs => gs.Player) // group by opponent .Select(g => new Head2HeadRecord { Opponent = g.Key.Name, Wins = g.Count(gs => gs.Loss), // player's wins are losses for opponent Losses = g.Count(gs => gs.Win), // player's losses are wins for opponent RatingChange = Math.Round(g.Sum(gs => ratings[gs.GameId].RatingChange)) // summing player's rating changes }) .OrderBy(h2h => h2h.Opponent)); }
private void btn_ViewDraw_Click(object sender, EventArgs e) { SeasonHandler.SelectDraw(txt_SeasonName.Text); EDSL_Draw drawGUI = new EDSL_Draw(cbo_Division.Text); drawGUI.Show(); }
private void btn_ViewSeasonDates_Click(object sender, EventArgs e) { season = SeasonHandler.ViewSeasonDates(data_Grid_View_SeasonDates, txt_SeasonName.Text); if (season != null) { btn_SelectDates.Enabled = true; } }
public IEnumerable <string> GetStartedSeasonsByPlayer([FromRoute(Name = "player")] string playerName) { return(SeasonHandler .GetStartedSeasonsByPlayer(DateTimeOffset.UtcNow, playerName) .OrderBy(s => s.StartDate) .ThenByDescending(s => s.EndDate) .Select(s => s.Name)); }
public IEnumerable <string> GetStartedSeasons() { return(SeasonHandler .GetStartedSeasons(DateTimeOffset.UtcNow) .OrderBy(s => s.StartDate) .ThenByDescending(s => s.EndDate) .Select(s => s.Name)); }
private void btn_NewDates_Click(object sender, EventArgs e) { season = SeasonHandler.GenerateSeasonDates(txt_SeasonName.Text, date_Picker_StartDate.Value, data_Grid_View_SeasonDates, Convert.ToInt32(num_Rounds.Value)); if (season != null) { btn_SelectDates.Enabled = true; } }
public void RefreshGrid() { season = DAFunctions.ReadSeason(seasonName); SeasonHandler.FillGridd(grid, season); grid.Columns[1].Width = 200; grid.Controls.Add(dtp); dtp.Visible = false; dtp.Format = DateTimePickerFormat.Long; dtp.TextChanged += new EventHandler(dtp_TextChange); grid.Columns[2].Selected = false; }
private void btn_CreateDraw_Click(object sender, EventArgs e) { if (txt_SeasonName.Text == "" || cbo_Division.Text == "") { MessageBox.Show("Please Select Season & Division to Create a Draw"); } else { SeasonHandler.CreateDivisionDraw(txt_SeasonName.Text, cbo_Division.Text); MessageBox.Show("Season Draw Created for " + cbo_Division.Text); } }
static bool AddSeasonIfNotExists(string name, DateTimeOffset startDate, DateTimeOffset endDate) { if (SeasonHandler.GetSeason(name) != null) { Console.WriteLine($"Season {name} already exists"); return(false); } Console.WriteLine($"Add {name} season from {startDate} to {endDate}"); SeasonHandler.AddSeason(new Season { Name = name, StartDate = startDate, EndDate = endDate }); return(true); }
public static void CalculateNewRatings(Game game) { // fetch players from database var winningPlayer = PlayerHandler.GetPlayerById(game.WinningGameScore.PlayerId); var losingPlayer = PlayerHandler.GetPlayerById(game.LosingGameScore.PlayerId); // fetch active seasons var activeSeasons = SeasonHandler.GetActiveSeasons(game.Created); foreach (var season in activeSeasons) { var winningPlayerSeason = GetOrCreatePlayerSeason(winningPlayer, season); var losingPlayerSeason = GetOrCreatePlayerSeason(losingPlayer, season); // convert to Elo.Lib.Players and calculate new ratings var winner = winningPlayerSeason.ToEloLibPlayer(); var loser = losingPlayerSeason.ToEloLibPlayer(); winner.WinsAgainst(loser); // update current ratings winningPlayerSeason.RatingChange = winner.Rating - winningPlayerSeason.Rating; winningPlayerSeason.Rating = winner.Rating; ++winningPlayerSeason.Wins; winningPlayerSeason.CurrentStreak = Math.Max(winningPlayerSeason.CurrentStreak + 1, 1); losingPlayerSeason.RatingChange = loser.Rating - losingPlayerSeason.Rating; losingPlayerSeason.Rating = loser.Rating; ++losingPlayerSeason.Losses; losingPlayerSeason.CurrentStreak = Math.Min(losingPlayerSeason.CurrentStreak - 1, -1); // add new ratings var winningPlayerRating = winningPlayerSeason.CreatePlayerRating(game.Id); var losingPlayerRating = losingPlayerSeason.CreatePlayerRating(game.Id); // update database PlayerHandler.UpdatePlayerSeasons(winningPlayerSeason, losingPlayerSeason); RatingHandler.AddRatings(winningPlayerRating, losingPlayerRating); } }
private void btn_SaveSeasonDates_Click(object sender, EventArgs e) { SeasonHandler.SaveSeasonDates(); MessageBox.Show("Season Dates have been Saved"); }
private void GetDraw() { DAFunctions.GetDraw(SeasonHandler.SelectDraw(cbo_SelectSeason.Text)); rounds = DAFunctions.draw; }