Example #1
0
 def test_white_resign(self):
     game = LocalGame()
     game.start()
     game.resign()
     game.end()
     self.assertEqual(BLACK, game.get_winner_color())
     self.assertEqual(WinReason.RESIGN, game.get_win_reason())
Example #2
0
 def test_expired_white(self):
     game = LocalGame()
     game.seconds_left_by_color[WHITE] = 0.5
     game.start()
     self.assertFalse(game.is_over())
     time.sleep(1)
     self.assertTrue(game.is_over())
Example #3
0
    def test_time(self, seconds=1, turns=20, phases=3):
        delta = seconds / (turns * phases)

        game = LocalGame(seconds_per_player=seconds)

        turn = True
        time_by_color = game.seconds_left_by_color.copy()

        game.start()
        for i in range(turns):
            for _ in range(phases):
                start = game.get_seconds_left()
                time.sleep(delta)
                end = game.get_seconds_left()

                self.assertAlmostEqual(start - end, delta, places=2)

            time_by_color[turn] = game.get_seconds_left()
            turn = not turn
            game.end_turn()
            self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2)
        game.end()
        self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2)
        time.sleep(delta)
        self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2)
Example #4
0
    def test_capture(self):
        """
        r n b q k b n r
        p p p . . p p p
        . . . . . . . .
        . . . p p . . .
        . . . P P . . .
        . . . . . . . .
        P P P . . P P P
        R N B Q K B N R
        """
        game = LocalGame()
        game.board.set_board_fen('rnbqkbnr/ppp2ppp/8/3pp3/3PP3/8/PPP2PPP/RNBQKBNR')
        game.start()

        _, _, result1 = game.move(Move(D4, E5))
        self.assertEqual(result1, E5)
        self.assertEqual(result1, game.opponent_move_results())
        game.end_turn()

        self.assertEqual(result1, game.opponent_move_results())
        game.sense(E5)
        self.assertEqual(result1, game.opponent_move_results())
        _, _, result2 = game.move(Move(D5, E4))
        self.assertEqual(result2, E4)
        self.assertEqual(result2, game.opponent_move_results())
Example #5
0
 def test_black_resign(self):
     game = LocalGame()
     game.start()
     game.end_turn()
     game.resign()
     game.end()
     self.assertEqual(WHITE, game.get_winner_color())
     self.assertEqual(WinReason.RESIGN, game.get_win_reason())
 def test_move_limit(self):
     game = LocalGame(reversible_moves_limit=1)
     game.start()
     for half_turn in range(2):
         game.sense(None)
         game.move(None)
         game.end_turn()
     self.assertTrue(game.is_over())
 def test_move_limit(self):
     game = LocalGame(reversible_moves_limit=1)
     game.start()
     for half_turn in range(2):
         game.sense(None)
         game.move(None)
         game.end_turn()
     self.assertEqual(None, game.get_winner_color())
     self.assertEqual(WinReason.MOVE_LIMIT, game.get_win_reason())
 def test_turn_limit(self):
     game = LocalGame(full_turn_limit=1)
     game.start()
     for half_turn in range(2):
         game.sense(None)
         game.move(None)
         game.end_turn()
     self.assertEqual(None, game.get_winner_color())
     self.assertEqual(WinReason.TURN_LIMIT, game.get_win_reason())
Example #9
0
 def test_expired_black(self):
     game = LocalGame()
     game.seconds_left_by_color[BLACK] = 0.5
     game.start()
     self.assertFalse(game.is_over())
     time.sleep(1)
     self.assertFalse(game.is_over())
     game.turn = BLACK
     self.assertTrue(game.is_over())
Example #10
0
def playback(game_history: GameHistory, player: Player, color: Color):
    game = LocalGame()

    opponent_name = game_history.get_white_player_name()
    if color == chess.WHITE:
        opponent_name = game_history.get_black_player_name()
    player.handle_game_start(color, game.board.copy(), opponent_name)
    game.start()

    turn = game_history.first_turn()

    while not game.is_over() and turn < game_history.last_turn():
        opt_capture_square = game.opponent_move_results()
        if game.turn == color:
            player.handle_opponent_move_result(opt_capture_square is not None,
                                               opt_capture_square)

        sense_actions = game.sense_actions()
        move_actions = game.move_actions()

        sense = game_history.sense(turn)
        player_sense = player.choose_sense(sense_actions, move_actions,
                                           game.get_seconds_left())
        if game.turn == color and sense != player_sense:
            print(
                'Warning: Sense action did not match history on turn {}. Using the sense action from history.'
                .format(turn))
        sense_result = game.sense(sense)
        if game.turn == color:
            player.handle_sense_result(sense_result)

        move = game_history.requested_move(turn)
        player_move = player.choose_move(move_actions, game.get_seconds_left())
        if game.turn == color and move != player_move:
            print(
                'Warning: Move action did not match history on turn {}. Using the move action from history.'
                .format(turn))
        requested_move, taken_move, opt_enemy_capture_square = game.move(move)
        if game.turn == color:
            player.handle_move_result(requested_move, taken_move,
                                      opt_enemy_capture_square is not None,
                                      opt_enemy_capture_square)

        game.end_turn()
        turn = turn.next

    game.end()
    winner_color = game.get_winner_color()
    win_reason = game.get_win_reason()
    game_history = game.get_game_history()

    player.handle_game_end(winner_color, win_reason, game_history)
Example #11
0
 def test_no_capture(self):
     game = LocalGame()
     game.start()
     _, _, result1 = game.move(Move(A2, A4))
     self.assertIsNone(result1)
     self.assertEqual(result1, game.opponent_move_results())
     game.end_turn()
     self.assertEqual(result1, game.opponent_move_results())
     game.sense(E5)
     self.assertEqual(result1, game.opponent_move_results())
     _, _, result2 = game.move(Move(F7, F5))
     self.assertIsNone(result2)
     self.assertEqual(result2, game.opponent_move_results())
 def test_unlimited(self):
     game = LocalGame(
         seconds_per_player=None,
         seconds_increment=None,
         full_turn_limit=None,
         reversible_moves_limit=None,
     )
     game.start()
     for half_turn in range(20):
         game.sense(None)
         game.move(None)
         game.end_turn()
     self.assertFalse(game.is_over())
Example #13
0
 def test_black_king_captured(self):
     """
     r n b q . b n r
     p p p p p p p p
     . . . . . . . .
     . . . . . . . .
     . . . . . . . .
     . . . . . . . .
     P P P P P P P P
     R N B Q K B N R
     """
     game = LocalGame()
     game.board.set_board_fen('rnbq1bnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')
     game.start()
     self.assertTrue(game.is_over())
Example #14
0
 def test_black_king_captured(self):
     """
     r n b q . b n r
     p p p p p p p p
     . . . . . . . .
     . . . . . . . .
     . . . . . . . .
     . . . . . . . .
     P P P P P P P P
     R N B Q K B N R
     """
     game = LocalGame()
     game.board.set_board_fen('rnbq1bnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR')
     game.start()
     self.assertEqual(WHITE, game.get_winner_color())
     self.assertEqual(WinReason.KING_CAPTURE, game.get_win_reason())
Example #15
0
 def test_no_time_black(self):
     game = LocalGame()
     game.seconds_left_by_color[BLACK] = 0
     game.start()
     self.assertEqual(WHITE, game.get_winner_color())
     self.assertEqual(WinReason.TIMEOUT, game.get_win_reason())
Example #16
0
 def test_forced_over(self):
     game = LocalGame()
     game.start()
     game.end()
     self.assertIsNone(game.get_winner_color())
     self.assertIsNone(game.get_win_reason())
Example #17
0
 def test_white_resign(self):
     game = LocalGame()
     game.start()
     game.resign()
     self.assertTrue(game.is_over())
Example #18
0
 def test_no_time_black(self):
     game = LocalGame()
     game.seconds_left_by_color[BLACK] = 0
     game.start()
     self.assertTrue(game.is_over())
Example #19
0
 def test_no_time_white(self):
     game = LocalGame()
     game.seconds_left_by_color[WHITE] = 0
     game.start()
     self.assertTrue(game.is_over())
Example #20
0
 def test_no_time_both(self):
     game = LocalGame(seconds_per_player=0)
     game.start()
     self.assertTrue(game.is_over())
Example #21
0
 def test_forced_over(self):
     game = LocalGame()
     game.start()
     self.assertFalse(game.is_over())
     game.end()
     self.assertTrue(game.is_over())
Example #22
0
 def test_not_over(self):
     game = LocalGame()
     game.start()
     self.assertFalse(game.is_over())
Example #23
0
 def test_black_resign(self):
     game = LocalGame()
     game.start()
     game.end_turn()
     game.resign()
     self.assertTrue(game.is_over())