Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
 def test_generate_elo(self):
     generate_player_table()
     generate_elo()
     m = Match(MongoInterface.logs_col.find_one())
     self.assertEqual(m.get_player("kloijh").elo, 1026.9403557437306)
     self.assertEqual(m.get_player("Anuski").elo, 994.9403557437306)
     d = generate_player_elo_curve("kloijh")
     self.assertEqual(d, [1026.9403557437306])
     g = generate_greening_list()
     self.assertEqual(g, {10: 1})
Esempio n. 4
0
 def test_generate_elo(self):
     generate_player_table()
     generate_elo()
     m = Match(MongoInterface.logs_col.find_one())
     self.assertEqual(m.get_player("kloijh").elo, 1026.9403557437306)
     self.assertEqual(m.get_player("Anuski").elo, 994.9403557437306)
     d = generate_player_elo_curve("kloijh")
     self.assertEqual(d, [1026.9403557437306])
     g = generate_greening_list()
     self.assertEqual(g, {10: 1})
Esempio n. 5
0
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())
Esempio n. 6
0
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())
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)
Esempio n. 9
0
def generate_simplified_player(match):
    """generate a simplified player based on the match
    and save on the database"""
    game = Match(match)
    for player in game.players:
        splayer = SimplifiedPlayer({"name": player.playerName, "elo": 1000})
        splayer.save()
Esempio n. 10
0
def determine_winners_greening(match):
    """ creates a list with  greening turns of winnwer players"""
    result = []
    m = Match(match)
    for player in m.winners:
        t = find_turn("buys", victory_cards, player, m.log.turns)
        if t != 0:
            result.append(t)
    return result
Esempio n. 11
0
def get_player_elo_data(playerName, match):
    """ return the player elo on a given match"""
    game = Match(match)
    return game.get_player(playerName).elo
Esempio n. 12
0
def get_player_elo_data(playerName, match):
    """ return the player elo on a given match"""
    game = Match(match)
    return game.get_player(playerName).elo
Esempio n. 13
0
 def test_log(self):
     m = Match(LogTest.dummy)
     self.assertEqual([p.to_doc() for p in m.log.turns],
                      LogTest.dummy.get("log"))
Esempio n. 14
0
 def test_player(self):
     m = Match(LogTest.dummy)
     self.assertEqual([p.toDoc() for p in m.players],
                      LogTest.dummy.get("players"))