Exemplo n.º 1
0
class Go:
    def __init__(self, n):
        self.size = n
        self.board = Board(self.size)

    def apply_move(self, move):
        # move = Move(self.board, point)
        # if not move.is_valid_move():
        #     return False
        if not move.isValid:
            return False
        new_board: Board = deepcopy(self.board)
        if move.is_play:
            new_board.place_stone(move)
        return new_board

    def get_legal_moves(self):
        moves = []
        for i in range(0, self.board.board_size):
            for j in range(0, self.board.board_size):
                point = Point(i, j)
                move = Move(self.board, point)
                if move.is_valid_move():
                    moves.append(move)

        pass_move = Move(self.board, None)
        moves.append(pass_move)
        return moves

    def is_point_eye(self, point: Point):

        if not self.board.coord_is_empty(point):
            return False

        if not self.board.point_on_grid(point):
            return False

        for neighbor in point.get_neighbors():
            if self.board.point_on_grid(neighbor):
                if self.board.get_point_color(neighbor) != self.board.player:
                    return False

        diag_stones = point.get_diagonals()
        opp_diags = 0

        for stone in diag_stones:
            if not self.board.point_on_grid(stone):
                opp_diags += 1
                break

        for stone in diag_stones:
            if self.board.get_point_color(stone) == 3 - self.board.player:
                opp_diags += 1

        if opp_diags > 1:
            return False

        return True