Exemple #1
0
    def DoPost(self):
        game = Game.get_by_id(long(self.request.get('game_id')))

        if not (game.player_1.key() == self.player.key()
                or game.player_2.key() == self.player.key()):
            raise Exception(
                "You can't complete a game you don't own, duderino!")

        if game.completed_date != None:
            raise Exception(
                "You can't complete a game that's already been completed, duderino!"
            )

        player_1_won = bool(self.request.get('player_1_won'))
        player_2_won = bool(self.request.get('player_2_won'))
        if not player_1_won ^ player_2_won:
            raise "One player, and only one player, can win a game."

        game.completed_date = datetime.now()
        if player_1_won:
            game.winner = game.player_1
        else:
            game.winner = game.player_2

        update_ranks(game)

        game.player_1.put()
        game.player_2.put()
        game.put()

        logging.info("Player %s completed game %s" % (self.player, game))
        self.redirect_to_redirect_path_or_home()
Exemple #2
0
  def DoPost(self):
    game = Game.get_by_id(long(self.request.get('game_id')))

    if not (game.player_1.key() == self.player.key() or
        game.player_2.key() == self.player.key()):
      raise Exception("You can't complete a game you don't own, duderino!")

    if game.completed_date != None:
      raise Exception("You can't complete a game that's already been completed, duderino!")

    player_1_won = bool(self.request.get('player_1_won'))
    player_2_won = bool(self.request.get('player_2_won'))
    if not player_1_won ^ player_2_won:
      raise "One player, and only one player, can win a game."

    game.completed_date = datetime.now()
    if player_1_won:
      game.winner = game.player_1
    else:
      game.winner = game.player_2

    update_ranks(game)

    game.player_1.put()
    game.player_2.put()
    game.put()

    logging.info("Player %s completed game %s" % (self.player, game))
    self.redirect_to_redirect_path_or_home()
Exemple #3
0
 def test_rank_using_wikipedia_example(self):
     player = mock_player(1613)
     elo.update_ranks(game(player, mock_player(1609), False))
     elo.update_ranks(game(player, mock_player(1388), True))
     elo.update_ranks(game(player, mock_player(1586), True))
     elo.update_ranks(game(player, mock_player(1720), False))
     # 1613 + 32 * (2 - 2.181), almost
     self.assertAlmostEquals(1608, player.rank, 0)
Exemple #4
0
 def test_rank_using_wikipedia_example(self):
     player = mock_player(1613)
     elo.update_ranks(game(player, mock_player(1609), False))
     elo.update_ranks(game(player, mock_player(1388), True))
     elo.update_ranks(game(player, mock_player(1586), True))
     elo.update_ranks(game(player, mock_player(1720), False))
     # 1613 + 32 * (2 - 2.181), almost
     self.assertAlmostEquals(1608, player.rank, 0)
Exemple #5
0
  def DoGet(self):

    logging.info('Calculating ELO rankings')
    # Reset ranks
    for player in Player.all():
      player.rank = elo.INITIAL_RANK
      player.put()

    # Calculate ranks for games in ascending order, since the order matters for ELO
    for game in Game.all_completed_asc():
      logging.info('Updating rankings based on game completed at %s:  %s' % (game.completed_date, game))
      elo.update_ranks(game)
      game.player_1.put()
      game.player_2.put()

    self.render_to_response("calculate_elo_rankings.html")
Exemple #6
0
 def test_example_2(self):
     # example 2 from http://www.chesselo.com/, except using K=32
     player = mock_player(2000)
     elo.update_ranks(game(player, mock_player(1900), False))
     # 2000 + 32 * (0 - 0.64)
     self.assertAlmostEquals(1980, player.rank, 0)
Exemple #7
0
 def test_example_2(self):
     # example 2 from http://www.chesselo.com/, except using K=32
     player = mock_player(2000)
     elo.update_ranks(game(player, mock_player(1900), False))
     # 2000 + 32 * (0 - 0.64)
     self.assertAlmostEquals(1980, player.rank, 0)