def elo_calculator(match): """generate the ELO of the match""" ELO_FACTOR = 32 ELO_PONDERATION = 400 game = Match(match) playersOldElo = {} eloPool = 0 #collect the base data to calculate the elo for player in game.players: temp = MongoInterface.get_player(player.playerName).get('elo') playersOldElo[player.playerName] = temp eloPool += temp #calculate each players elo for player in game.players: splayer = SimplifiedPlayer(MongoInterface.get_player( player.playerName)) oldElo = playersOldElo[player.playerName] if player.playerName in game.winners: newElo = oldElo + ((ELO_FACTOR * (1 - (math.pow( 10, oldElo / ELO_PONDERATION) / eloPool))) / len(game.winners)) else: newElo = oldElo + ( (ELO_FACTOR * (0 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool)))) splayer.elo = newElo splayer.save() player.elo = newElo MongoInterface.update_log(game.ident, game.toDoc()) return newElo
def elo_calculator(match): """generate the ELO of the match""" ELO_FACTOR = 32 ELO_PONDERATION = 400 game = Match(match) playersOldElo = {} eloPool = 0 # collect the base data to calculate the elo for player in game.players: temp = MongoInterface.get_player(player.playerName).get("elo") playersOldElo[player.playerName] = temp eloPool += temp # calculate each players elo for player in game.players: splayer = SimplifiedPlayer(MongoInterface.get_player(player.playerName)) oldElo = playersOldElo[player.playerName] if player.playerName in game.winners: newElo = oldElo + ( (ELO_FACTOR * (1 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool))) / len(game.winners) ) else: newElo = oldElo + ((ELO_FACTOR * (0 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool)))) splayer.elo = newElo splayer.save() player.elo = newElo MongoInterface.update_log(game.ident, game.toDoc()) return newElo
def detect_bigmoney_strategy(match): """defines if one or more players in the match used the bigmoney strategy""" game = Match(match) is_big_money_flag = True for player in game.players: deck = player.deck for card in deck: if not (card in ("province", "gold", "silver", "duchy", "smithy")): is_big_money_flag = False if is_big_money_flag: player.strategy = "bigmoney" MongoInterface.update_log(game.ident, game.toDoc())
def test_match_doc_diff(self): self.maxDiff = None m = Match(LogTest.dummy) doc = {"date": LogTest.dummy.get("date"), "filename": LogTest.dummy.get("filename"), "eloGap": LogTest.dummy.get("eloGap"), "winners": LogTest.dummy.get("winners"), "cardsgonne": LogTest.dummy.get("cardsgonne"), "market": LogTest.dummy.get("market"), "trash": LogTest.dummy.get("trash"), "players": LogTest.dummy.get("players"), "log": LogTest.dummy.get("log")} self.assertEqual(m.toDoc(), doc)
def test_match_doc_diff(self): self.maxDiff = None m = Match(LogTest.dummy) doc = { "date": LogTest.dummy.get("date"), "filename": LogTest.dummy.get("filename"), "eloGap": LogTest.dummy.get("eloGap"), "winners": LogTest.dummy.get("winners"), "cardsgonne": LogTest.dummy.get("cardsgonne"), "market": LogTest.dummy.get("market"), "trash": LogTest.dummy.get("trash"), "players": LogTest.dummy.get("players"), "log": LogTest.dummy.get("log") } self.assertEqual(m.toDoc(), doc)