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