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
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
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
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
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
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
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
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
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()
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()
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
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
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
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