コード例 #1
0
    def get_lines(self, color, coord):
        pos_fin = Coordinate(coord.x, coord.y)
        pos_inicial = Coordinate(coord.x, coord.y)
        can_fichas_volteables = 0
        vec_lineas = []
        for inc_fila in xrange(-1, 2):
            for inc_col in xrange(-1, 2):
                pos_fin.x = pos_inicial.x + inc_fila
                pos_fin.y = pos_inicial.y + inc_col
                #Verifica que haya al menos una ficha del color opuesto para voltear
                if Referee.can_turn(color, pos_inicial, inc_fila, inc_col,
                                    self):
                    hash_linea = {}
                    vec_casillas = []
                    #Contar las fichas volteables en esa linea
                    while True:
                        can_fichas_volteables += 1
                        vec_casillas.append(Coordinate(pos_fin.x, pos_fin.y))
                        pos_fin.x += inc_fila
                        pos_fin.y += inc_col
                        if not self.__casilla[pos_fin.x][pos_fin.y] == -color:
                            break
                    hash_linea["casilla_inicial"] = pos_inicial
                    hash_linea["casilla_final"] = Coordinate(
                        pos_fin.x, pos_fin.y)
                    hash_linea["can_fichas_volteables"] = can_fichas_volteables
                    hash_linea["casillas_volteables"] = vec_casillas
                    vec_lineas.append(hash_linea)
                    can_fichas_volteables = 0

        return vec_lineas
コード例 #2
0
ファイル: board.py プロジェクト: joausaga/clubdeothello
    def get_lines(self,color,coord):
        pos_fin = Coordinate(coord.x,coord.y)
        pos_inicial = Coordinate(coord.x,coord.y)
        can_fichas_volteables = 0
        vec_lineas = []
        for inc_fila in xrange(-1,2):
            for inc_col in xrange(-1,2):
                pos_fin.x = pos_inicial.x + inc_fila
                pos_fin.y = pos_inicial.y + inc_col
                #Verifica que haya al menos una ficha del color opuesto para voltear
                if Referee.can_turn(color, pos_inicial, inc_fila, inc_col, self):
                    hash_linea = {}
                    vec_casillas = []
                    #Contar las fichas volteables en esa linea
                    while True:
                        can_fichas_volteables += 1
                        vec_casillas.append(Coordinate(pos_fin.x,pos_fin.y))
                        pos_fin.x += inc_fila
                        pos_fin.y += inc_col
                        if not self.__casilla[pos_fin.x][pos_fin.y] == -color:
                            break
                    hash_linea["casilla_inicial"] = pos_inicial
                    hash_linea["casilla_final"] =  Coordinate(pos_fin.x,pos_fin.y)
                    hash_linea["can_fichas_volteables"] = can_fichas_volteables
                    hash_linea["casillas_volteables"] = vec_casillas
                    vec_lineas.append(hash_linea)
                    can_fichas_volteables = 0

        return vec_lineas
コード例 #3
0
ファイル: referee.py プロジェクト: joausaga/clubdeothello
    def is_at_least_one_move(color, tablero):
        dimension = tablero.get_dimension()
        pos = Coordinate()

        for i in range (0,dimension):
            for j in range (0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    return True

        return False
コード例 #4
0
    def is_at_least_one_move(color, tablero):
        dimension = tablero.get_dimension()
        pos = Coordinate()

        for i in range(0, dimension):
            for j in range(0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    return True

        return False
コード例 #5
0
ファイル: referee.py プロジェクト: joausaga/clubdeothello
    def number_of_successors(color, tablero):
        cant_sucesores = 0
        pos = Coordinate()
        dimension = tablero.get_dimension()

        for i in range (0,dimension):
            for j in range (0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    cant_sucesores += 1

        return cant_sucesores
コード例 #6
0
    def number_of_successors(color, tablero):
        cant_sucesores = 0
        pos = Coordinate()
        dimension = tablero.get_dimension()

        for i in range(0, dimension):
            for j in range(0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    cant_sucesores += 1

        return cant_sucesores
コード例 #7
0
ファイル: referee.py プロジェクト: joausaga/clubdeothello
    def possibles_moves(color, tablero):
        coordenadas = []
        pos = Coordinate()
        dimension = tablero.get_dimension()

        for i in range (0,dimension):
            for j in range (0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    nueva_pos = Coordinate(i, j)
                    coordenadas.append(nueva_pos)

        return coordenadas
コード例 #8
0
    def possibles_moves(color, tablero):
        coordenadas = []
        pos = Coordinate()
        dimension = tablero.get_dimension()

        for i in range(0, dimension):
            for j in range(0, dimension):
                pos.x = i
                pos.y = j
                if Referee.is_valid_move(color, pos, tablero):
                    nueva_pos = Coordinate(i, j)
                    coordenadas.append(nueva_pos)

        return coordenadas
コード例 #9
0
    def turn_pieces(self, color, pos_ini):
        pos_fin = Coordinate(pos_ini.x, pos_ini.y)

        for inc_fila in xrange(-1, 2):
            for inc_col in xrange(-1, 2):
                pos_fin.x = pos_ini.x + inc_fila
                pos_fin.y = pos_ini.y + inc_col
                #Verifica que haya al menos una ficha del color opuesto para voltear
                if Referee.can_turn(color, pos_ini, inc_fila, inc_col, self):
                    #Voltear las fichas
                    while True:
                        self.__casilla[pos_fin.x][pos_fin.y] = color
                        pos_fin.x += inc_fila
                        pos_fin.y += inc_col
                        if not self.__casilla[pos_fin.x][pos_fin.y] == -color:
                            break
        #Actualizo los contadores de las fichas blancas o negras dependiendo del color
        self.update_pieces_counters()
コード例 #10
0
ファイル: board.py プロジェクト: joausaga/clubdeothello
    def turn_pieces(self, color, pos_ini):
        pos_fin = Coordinate(pos_ini.x, pos_ini.y)

        for inc_fila in xrange(-1,2):
            for inc_col in xrange(-1,2):
                pos_fin.x = pos_ini.x + inc_fila
                pos_fin.y = pos_ini.y + inc_col
                #Verifica que haya al menos una ficha del color opuesto para voltear
                if Referee.can_turn(color, pos_ini, inc_fila, inc_col, self):
                    #Voltear las fichas
                    while True:
                        self.__casilla[pos_fin.x][pos_fin.y] = color
                        pos_fin.x += inc_fila
                        pos_fin.y += inc_col
                        if not self.__casilla[pos_fin.x][pos_fin.y] == -color:
                            break
        #Actualizo los contadores de las fichas blancas o negras dependiendo del color
        self.update_pieces_counters()
コード例 #11
0
ファイル: ai.py プロジェクト: joausaga/clubdeothello
    def __number_stable_boxes(self,tablero):
        pos = Coordinate()
        estables = []
        dim = tablero.get_dimension()
        for _ in xrange(dim):
            estables.append([False]*dim)

        cambio_estado = True
        while (cambio_estado):
            cambio_estado = False
            for i in xrange(0,dim):
                for j in xrange(0,dim):
                    pos.x = i
                    pos.y = j
                    if tablero.get_valor_casilla(i,j) != VACIO and not estables[i][j] and not self.__can_turn(pos, tablero, estables):
                        estables[i][j] = True
                        cambio_estado = True

        return estables
コード例 #12
0
ファイル: ai.py プロジェクト: joausaga/clubdeothello
    def __border_pieces(self,tablero, color):
        can_fichas_frontera = 0
        dim = tablero.get_dimension()

        for i in xrange(0,dim):
            for j in xrange(0,dim):
                es_frontera = False
                if tablero.get_valor_casilla(i,j) == color:
                    aux_coord = Coordinate()
                    for inc_fila in xrange(-1,2):
                        for inc_col in xrange(-1,2):
                            aux_coord.x = i + inc_fila
                            aux_coord.y = j + inc_col
                            if not (inc_fila == 0 and inc_col == 0 and tablero.valid_pos(aux_coord) and tablero.get_valor_casilla(aux_coord.x,aux_coord.y) == VACIO):
                                es_frontera = True
                                inc_fila = 2
                                break
                if es_frontera:
                    can_fichas_frontera += 1

        return can_fichas_frontera
コード例 #13
0
ファイル: ai.py プロジェクト: sugar-activities/4286-activity
    def __number_stable_boxes(self, tablero):
        pos = Coordinate()
        estables = []
        dim = tablero.get_dimension()
        for _ in xrange(dim):
            estables.append([False] * dim)

        cambio_estado = True
        while (cambio_estado):
            cambio_estado = False
            for i in xrange(0, dim):
                for j in xrange(0, dim):
                    pos.x = i
                    pos.y = j
                    if tablero.get_valor_casilla(
                            i, j
                    ) != VACIO and not estables[i][j] and not self.__can_turn(
                            pos, tablero, estables):
                        estables[i][j] = True
                        cambio_estado = True

        return estables
コード例 #14
0
ファイル: ai.py プロジェクト: sugar-activities/4286-activity
    def __border_pieces(self, tablero, color):
        can_fichas_frontera = 0
        dim = tablero.get_dimension()

        for i in xrange(0, dim):
            for j in xrange(0, dim):
                es_frontera = False
                if tablero.get_valor_casilla(i, j) == color:
                    aux_coord = Coordinate()
                    for inc_fila in xrange(-1, 2):
                        for inc_col in xrange(-1, 2):
                            aux_coord.x = i + inc_fila
                            aux_coord.y = j + inc_col
                            if not (inc_fila == 0 and inc_col == 0
                                    and tablero.valid_pos(aux_coord)
                                    and tablero.get_valor_casilla(
                                        aux_coord.x, aux_coord.y) == VACIO):
                                es_frontera = True
                                inc_fila = 2
                                break
                if es_frontera:
                    can_fichas_frontera += 1

        return can_fichas_frontera