示例#1
0
    def test_available_moves_with_unusable_dice(self):
        board = [0] * 26

        board[5] = 1
        board[7] = -2
        board[8] = -2

        moves = {tuple(k[0]) for k in utils.available_moves(board, (1, 2), 'w')}
        self.assertEqual(moves, {
            ((5, 1), ),
        })
示例#2
0
    def test_available_moves(self):
        board = [0] * 26

        board[5] = 2
        board[6] = 1
        board[7] = -1
        board[8] = -2

        moves = {tuple(k[0]) for k in utils.available_moves(board, (1, 2), 'w')}
        self.assertEqual(moves, {
            ((5, 2), (5, 1), ),
            ((5, 1), (5, 2), ),
            ((5, 2), (6, 1), ),
            ((6, 1), (5, 2), ),
            ((6, 1), (7, 2), ),
        })
示例#3
0
    def maximize(self, board, level=0, previous_value=None):
        modifier = 1 if level % 2 == 0 else -1
        if level == self.levels:
            return self.evaluate(board)

        result = 0
        for dices in it.combinations_with_replacement(range(1, 7), 2):
            multiplier = 1/36 if dices[0] == dices[1] else 1/18
            max_value = modifier * -2**31

            for _, possible_board in available_moves(board, dices,
                    player_from_number(modifier)):
                possible_board_value = self.maximize(possible_board, level+1,
                        max_value)
                if modifier * max_value < modifier * possible_board_value:
                    max_value = possible_board_value

                if previous_value is not None \
                        and modifier * max_value <= modifier * previous_value:
                    return max_value

            result += modifier * multiplier * max_value

        return result