Exemplo n.º 1
0
        static void Main(string[] args)
        {
            // delete all ratings and stats
            Console.WriteLine("Delete all ratings");
            PlayerHandler.DeleteAllPlayerSeasons();
            RatingHandler.DeleteAllRatings();

            // get all games in chronological order
            Console.WriteLine("Get games");
            var games = GameHandler.GetGamesAfter(int.MinValue, SortOrder.Ascending);

            // calculate new ratings
            Console.WriteLine($"Calculate new ratings for {games.Count} games");
            var completed = 0;

            foreach (var game in games)
            {
                Ratings.CalculateNewRatings(game);

                ++completed;
                Console.Write($"\rProgress: {completed}/{games.Count} ({completed / (double)games.Count:P1})");
            }

            Console.WriteLine();
        }
Exemplo n.º 2
0
        public bool PostGame([FromBody] GameResult gameResult)
        {
            try
            {
                ValidateGameResult(gameResult);

                var winningPlayer = GetOrCreatePlayer(gameResult.Winner);
                var losingPlayer  = GetOrCreatePlayer(gameResult.Loser);

                var game = GameHandler.AddGame(new Models.Game
                {
                    Scores = new List <GameScore>
                    {
                        new GameScore
                        {
                            PlayerId = winningPlayer.Id,
                            Score    = 1.0
                        },
                        new GameScore
                        {
                            PlayerId = losingPlayer.Id,
                            Score    = 0.0
                        }
                    }
                });

                Ratings.CalculateNewRatings(game);

                return(true);
            }
            catch (Exception /*ex*/)
            {
                return(false);
            }
        }
Exemplo n.º 3
0
        public bool DeleteGame(int id)
        {
            try
            {
                // get the game
                var game = GameHandler.GetGame(id);

                if (game == null)
                {
                    throw new ArgumentException("No such game");
                }

                // delete the game (incl game scores and player ratings)
                GameHandler.DeleteGame(game);

                // delete ratings from later games
                RatingHandler.DeleteRatingsAfter(game.PlayerRatings[0].Id, deleteDefaultRatings: false);

                // reset current ratings in PlayerSeasons
                var lastPlayerRatings    = RatingHandler.GetLatestRatingsPerPlayerSeason();
                var updatedPlayerSeasons = lastPlayerRatings
                                           .Where(pr => !pr.PlayerSeason.Season.HasEnded(game.Created)) // current and future seasons
                                           .Select(pr =>
                {
                    var playerSeason           = pr.PlayerSeason;
                    playerSeason.Season        = null;
                    playerSeason.Rating        = pr.Rating;
                    playerSeason.RatingChange  = pr.RatingChange;
                    playerSeason.Wins          = pr.Wins;
                    playerSeason.Losses        = pr.Losses;
                    playerSeason.CurrentStreak = pr.CurrentStreak;
                    return(playerSeason);
                })
                                           .ToList();

                PlayerHandler.UpdatePlayerSeasons(updatedPlayerSeasons.Where(ps => ps.GamesPlayed > 0));
                PlayerHandler.DeletePlayerSeasons(updatedPlayerSeasons.Where(ps => ps.GamesPlayed == 0));

                // get all games after the deleted game
                var games = GameHandler.GetGamesAfter(game.Id, SortOrder.Ascending);

                // recalculate ratings
                games.ForEach(g => Ratings.CalculateNewRatings(g));

                // delete players with no games
                var players = PlayerHandler.GetAllPlayers()
                              .Where(p => p.Seasons.Count == 0);
                PlayerHandler.DeletePlayers(players);

                return(true);
            }
            catch (Exception /*ex*/)
            {
                return(false);
            }
        }