Exemplo n.º 1
0
        public async Task Elo(params string[] options)
        {
            var gameMode = GameMode.Variable;

            var suddendeathList = new List <string> {
                "suddendeath", "sd", "sudden", "death"
            };

            if (suddendeathList.Contains(options.FirstOrDefault()?.ToLower()))
            {
                gameMode = GameMode.SuddenDeath;
            }

            var eloHandler = new EloHandler(_db, Context.Guild.Id, gameMode);
            var eloSeason  = eloHandler.GetCurrentEloSeason();

            var message = $"`{gameMode}: {eloSeason.SeasonName}`";

            var playerElos = eloSeason.PlayerElos
                             .Where(x => x.GameMode == gameMode) // TODO: shouldn't have to do this since we instantiated the elohandler with gamemode. something needs to be fixed.
                             .OrderByDescending(x => x.Rating)
                             .ToList();

            foreach (var playerElo in playerElos)
            {
                message += $"\n{playerElo.Player.Name}: {playerElo.Rating}";
            }
            await SendMessageAsync(message);
        }
Exemplo n.º 2
0
        public void Generate()
        {
            HistoricalTeamRanks = new Dictionary <string, List <int> >();
            foreach (var team in teamRepository.GetTeams())
            {
                HistoricalTeamRanks.Add(TeamToKey(team), new List <int> {
                    EloHandler.StartingScore
                });
            }
            foreach (var game in gameRepository.GetGames().OrderBy(g => g.GameTime))
            {
                var blueTeam = new DisplayTeam
                {
                    DefenseID = game.BlueDefense,
                    OffenseID = game.BlueOffense,
                };
                var redTeam = new DisplayTeam
                {
                    DefenseID = game.RedDefense,
                    OffenseID = game.RedOffense
                };

                blueTeam.GamesPlayed = HistoricalTeamRanks[TeamToKey(blueTeam)].Count - 1;
                redTeam.GamesPlayed  = HistoricalTeamRanks[TeamToKey(redTeam)].Count - 1;


                var blueRankList = HistoricalTeamRanks[TeamToKey(blueTeam)];
                var redRankList  = HistoricalTeamRanks[TeamToKey(redTeam)];

                blueTeam.Rank = blueRankList[blueRankList.Count - 1];
                redTeam.Rank  = redRankList[redRankList.Count - 1];

                var updatedRanks = EloHandler.UpdatedRanks(blueTeam, redTeam, game);

                HistoricalTeamRanks[TeamToKey(blueTeam)].Add(updatedRanks[0]);
                HistoricalTeamRanks[TeamToKey(redTeam)].Add(updatedRanks[1]);
            }
            //var blueIDs = $"{blueTeam.DefenseID} {blueTeam.OffenseID}";
            //var redIDs = $"{blueTeam.DefenseID} {blueTeam.OffenseID}";
            //try
            //{
            //    HistoricalTeamRanks[blueIDs].Add(blueTeam.Rank);
            //}
            //catch
            //{
            //    HistoricalTeamRanks.Add(blueIDs, new List<int> { 1200,blueTeam.Rank });
            //}
            //try
            //{
            //    HistoricalTeamRanks[redIDs].Add(redTeam.Rank);
            //}
            //catch
            //{
            //    HistoricalTeamRanks.Add(redIDs, new List<int> { 1200,redTeam.Rank });
            //}
        }
Exemplo n.º 3
0
        public void Test1()
        {
            ulong guildId   = 111111;
            ulong channelId = 123456;

            var game = new GameObject(_db, channelId, guildId);

            game.CreateGame();

            game.AddPlayer(1, "Dave");
            game.AddPlayer(2, "Courtney");
            game.SetModeSuddenDeath();
            //game.ShufflePlayers();
            game.StartNewRound(); // Rename to "Start Game" and then auto-call this after "Liar" ??
            game.SetPlayerDice(1, "1,2,3,4,5");
            game.SetPlayerDice(2, "2,3,4,5,6");

            game.Bid(1, 10, 6);
            var liarResult = game.Liar(2);

            var wasEliminated         = liarResult.PlayerWhoLostDice.IsEliminated;
            var numberOfDiceRemaining = liarResult.PlayerWhoLostDice.NumberOfDice;

            var gameMode    = game.GetGameMode();
            var eloHandler  = new EloHandler(_db, guildId, gameMode);
            var gamePlayers = game.GetAllPlayers();

            foreach (var gamePlayer in gamePlayers)
            {
                eloHandler.AddPlayer(gamePlayer.PlayerId, gamePlayer.Rank);
            }
            eloHandler.CalculateAndSaveElo();

            var eloResults = eloHandler.GetEloResults();

            var daveElo     = eloResults.Single(x => x.PlayerId == 1);
            var courtneyElo = eloResults.Single(x => x.PlayerId == 2);

            Assert.AreEqual(1510, courtneyElo.Elo);
            Assert.AreEqual(1500, courtneyElo.PreviousElo);
            Assert.AreEqual(1490, daveElo.Elo);
            Assert.AreEqual(1500, daveElo.PreviousElo);

            var eloSeason = eloHandler.GetCurrentEloSeason();

            Assert.AreEqual("Season Zero", eloSeason.SeasonName);
        }
Exemplo n.º 4
0
        private async Task CalculateEloAsync(GameObject game)
        {
            var gameMode    = game.GetGameMode();
            var eloHandler  = new EloHandler(_db, Context.Guild.Id, gameMode);
            var gamePlayers = game.GetAllPlayers()
                              .OrderBy(x => x.Rank);

            foreach (var gamePlayer in gamePlayers)
            {
                eloHandler.AddPlayer(gamePlayer.PlayerId, gamePlayer.Rank);
            }
            eloHandler.CalculateAndSaveElo();

            var eloResults = eloHandler.GetEloResults();

            foreach (var gamePlayer in gamePlayers)
            {
                var eloResult = eloResults.Single(x => x.PlayerId == gamePlayer.PlayerId);
                await SendMessageAsync($"`{gamePlayer.Rank}` {gamePlayer.Name} `{eloResult.PreviousElo}` => `{eloResult.Elo}` ({eloResult.Elo - eloResult.PreviousElo})");

                Thread.Sleep(1500); // For suspense!
            }
        }
Exemplo n.º 5
0
        public void Update(Game newGame)
        {
            //win = {blue,red}
            var win = new[] { 0, 0 };

            if (newGame.BlueScore > newGame.RedScore)
            {
                win = new[] { 1, 0 };
            }
            else
            {
                win = new[] { 0, 1 };
            }

            var blueTeam = teamStatsRetriever.GetTeamByPlayers(newGame.BlueDefense, newGame.BlueOffense);
            var redTeam  = teamStatsRetriever.GetTeamByPlayers(newGame.RedDefense, newGame.RedOffense);

            if (blueTeam == null)
            {
                teamCreator.Create(new Team
                {
                    DefenseID   = newGame.BlueDefense,
                    OffenseID   = newGame.BlueOffense,
                    GamesPlayed = 0,
                    GamesWon    = 0,
                });
                blueTeam = new DisplayTeam
                {
                    DefenseID   = newGame.BlueDefense,
                    OffenseID   = newGame.BlueOffense,
                    GamesPlayed = 0,
                    GamesWon    = 0,
                    Rank        = EloHandler.StartingScore
                };
            }
            if (redTeam == null)
            {
                teamCreator.Create(new Team
                {
                    DefenseID   = newGame.RedDefense,
                    OffenseID   = newGame.RedOffense,
                    GamesPlayed = 0,
                    GamesWon    = 0,
                });
                redTeam = new DisplayTeam
                {
                    DefenseID   = newGame.RedDefense,
                    OffenseID   = newGame.RedOffense,
                    GamesPlayed = 0,
                    GamesWon    = 0,
                    Rank        = EloHandler.StartingScore
                };
            }
            var updatedScores = EloHandler.UpdatedRanks(blueTeam, redTeam, newGame);

            blueTeam.GamesPlayed += 1;
            blueTeam.GamesWon    += win[0];
            blueTeam.Rank         = updatedScores[0];


            redTeam.GamesPlayed += 1;
            redTeam.GamesWon    += win[1];
            redTeam.Rank         = updatedScores[1];

            teamRepository.Update(blueTeam);
            teamRepository.Update(redTeam);
        }