def posibles_movimientos_en_una_direccion(self, casilla_inicial, avanzar_fila, avanzar_columna): posibles_movimientos = deque() color_de_pieza = self.obtener_color_de_pieza(casilla_inicial) casilla_objetivo = Posicion.Posicion(casilla_inicial.fila, casilla_inicial.columna) casilla_objetivo.avanzar_casilla(avanzar_fila, avanzar_columna) while True: if not casilla_objetivo.validar_posicion(): break pieza_casilla_objetivo = self.obtener_pieza_de_casilla( casilla_objetivo) if pieza_casilla_objetivo != 0: if self.calculando_movimiento: color_casilla_objetivo = self.obtener_color_de_pieza( casilla_objetivo) if color_de_pieza == color_casilla_objetivo: break posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) break else: posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) casilla_objetivo = Posicion.Posicion( casilla_objetivo.fila + avanzar_fila, casilla_objetivo.columna + avanzar_columna) return posibles_movimientos
def es_movimiento_a_realizar_legal(self): self.movimiento_a_realizar = Movimiento.Movimiento(self.casilla_inicial,self.casilla_objetivo) for movimiento in self.movimientos_legales: if (self.movimiento_a_realizar.equals(movimiento)): return True self.limpiar_movimiento_a_realizar() return False
def set_al_passant(self,movimiento): pieza = abs(self.tablero.obtener_pieza_de_casilla(movimiento.casilla_objetivo)) if pieza == 1: filas_avanzadas = abs(movimiento.casilla_inicial.fila - movimiento.casilla_objetivo.fila) if filas_avanzadas == 2: for i in range(movimiento.casilla_objetivo.columna-1,movimiento.casilla_objetivo.columna+2): if i == movimiento.casilla_objetivo.columna: continue tmp_posicion = Posicion(movimiento.casilla_objetivo.fila,i) pieza_objetivo = abs(self.tablero.obtener_pieza_de_casilla(tmp_posicion)) if pieza_objetivo == 1: color_pieza_inicial = self.tablero.get_color_pieza(movimiento.casilla_objetivo) color_pieza_objetivo = self.tablero.get_color_pieza(tmp_posicion) if color_pieza_inicial != color_pieza_objetivo: if color_pieza_inicial == Turno.BLANCAS: fila = movimiento.casilla_objetivo.fila+1 else: fila = movimiento.casilla_objetivo.fila-1 tmp_posicion_objetivo = Posicion(fila,movimiento.casilla_objetivo.columna) mov_al_passant = Movimiento.Movimiento(tmp_posicion,tmp_posicion_objetivo) self.al_passant = mov_al_passant return True self.al_passant = None return False
def posibles_movimientos_de_rey(self, casilla_inicial): posibles_movimientos = deque() color_de_pieza = self.obtener_color_de_pieza(casilla_inicial) for fila in range(casilla_inicial.fila - 1, casilla_inicial.fila + 2): for columna in range(casilla_inicial.columna - 1, casilla_inicial.columna + 2): casilla_objetivo = Posicion.Posicion(fila, columna) if casilla_objetivo.equals(casilla_inicial): continue if casilla_objetivo.validar_posicion(): if self.calculando_movimiento: color_objetivo = self.obtener_color_de_pieza( casilla_objetivo) pieza = abs( self.obtener_pieza_de_casilla(casilla_objetivo)) if color_de_pieza == color_objetivo: continue posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) return posibles_movimientos
def es_movimiento_enrroque(self, movimiento): filas = [0, 7] columnas = [2, 6] for fila in filas: casilla_inicial = Posicion.Posicion(fila, 4) for columna in columnas: casilla_objetivo = Posicion.Posicion(fila, columna) mov_tmp = Movimiento.Movimiento(casilla_inicial, casilla_objetivo) if mov_tmp.equals(movimiento): return True
def posibles_movimientos_de_caballo(self, casilla_inicial): posibles_movimientos = deque() color_de_pieza = self.obtener_color_de_pieza(casilla_inicial) unos = [-1, 1] dos = [-2, 2] for i in unos: for j in dos: casilla_objetivo = Posicion.Posicion( casilla_inicial.fila + i, casilla_inicial.columna + j) if casilla_objetivo.validar_posicion(): if self.calculando_movimiento: color_objetivo = self.obtener_color_de_pieza( casilla_objetivo) if color_de_pieza == color_objetivo: continue posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) for i in dos: for j in unos: casilla_objetivo = Posicion.Posicion( casilla_inicial.fila + i, casilla_inicial.columna + j) if casilla_objetivo.validar_posicion(): if self.calculando_movimiento: color_objetivo = self.obtener_color_de_pieza( casilla_objetivo) if color_de_pieza == color_objetivo: continue posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) return posibles_movimientos
def mover_pieza(self,movimiento_a_realizar): self.cantidad_de_movimientos = self.cantidad_de_movimientos + 1 self.__log.agregar_log(self.tablero,movimiento_a_realizar) str_mov = self.__log.movimiento_to_string() if self.turno == 'B': pieza_de_coronamiento = 5 self.turno = 'N' else: pieza_de_coronamiento = -5 self.turno = 'B' casilla_inicial = Posicion(movimiento_a_realizar.casilla_inicial.fila,movimiento_a_realizar.casilla_inicial.columna) casilla_objetivo = Posicion(movimiento_a_realizar.casilla_objetivo.fila,movimiento_a_realizar.casilla_objetivo.columna) movimiento_GUI = Movimiento.Movimiento(casilla_inicial,casilla_objetivo) if self.J1 == "N": movimiento_GUI.casilla_inicial.invertir() movimiento_GUI.casilla_objetivo.invertir() if (self.al_passant != None) and (movimiento_a_realizar.equals(self.al_passant)): self.master.GUI_ajedrez.colocar_captura_al_paso(movimiento_GUI) self.tablero.realizar_captura_al_paso(movimiento_a_realizar) elif self.tablero.es_movimiento_enrroque(movimiento_a_realizar): self.master.GUI_ajedrez.colocar_enrroque(movimiento_GUI) self.tablero.realizar_enrroque(movimiento_a_realizar) elif self.tablero.es_movimiento_coronacion(movimiento_a_realizar): self.master.GUI_ajedrez.colocar_coronamiento(movimiento_GUI,pieza_de_coronamiento) self.tablero.realizar_coronamiento(movimiento_a_realizar,pieza_de_coronamiento) else: self.master.GUI_ajedrez.mover_pieza(movimiento_GUI) self.tablero.mover_pieza(movimiento_a_realizar) self.master.GUI_ajedrez.escribir_en_text_box(str(self.cantidad_de_movimientos) + ". " + str_mov) self.set_al_passant(movimiento_a_realizar) self.actualizar_turno_pc() self.actualizar_estado_de_tablero() estado = self.get_estado_log() self.__log.set_estado_a_log(estado) self.master.GUI_ajedrez.limpiar_casillas_mov_anterior() self.master.GUI_ajedrez.marcar_movimiento_anterior(movimiento_a_realizar) self.master.GUI_ajedrez.actualizar_estado_de_pantalla() self.limpiar_casilla_inicial() self.limpiar_casilla_objetivo() self.limpiar_movimiento_a_realizar()
def generar_enrroque_blancas_corto(self, casillas_atacadas): ## | T | R | corto | T | R | ## 7,7 7,4 -> 7,5 7,6 posicion_rey = Posicion.Posicion(7, 4) posicion_torre = Posicion.Posicion(7, 7) posicion_rey_pieza = self.obtener_pieza_de_casilla(posicion_rey) posicion_torre_pieza = self.obtener_pieza_de_casilla(posicion_torre) if posicion_rey_pieza == 6 and posicion_torre_pieza == 4: fila = 7 for columna in range(5, 7): posicion = Posicion.Posicion(fila, columna) pieza_de_casilla = self.obtener_pieza_de_casilla(posicion) if pieza_de_casilla != 0 or self.es_casilla_atacada( posicion, casillas_atacadas): return None casilla_objetivo = Posicion.Posicion(7, 6) movimiento = Movimiento.Movimiento(posicion_rey, casilla_objetivo) return movimiento else: return None
def posibles_movimientos_de_peon(self, casilla_inicial): posibles_movimientos = deque() color_de_pieza = self.obtener_color_de_pieza(casilla_inicial) if color_de_pieza == 'B': casilla_objetivo = Posicion.Posicion(casilla_inicial.fila - 1, casilla_inicial.columna) else: casilla_objetivo = Posicion.Posicion(casilla_inicial.fila + 1, casilla_inicial.columna) fila_actual = casilla_objetivo.fila for i in range(casilla_inicial.columna - 1, casilla_inicial.columna + 2): casilla_objetivo = Posicion.Posicion(fila_actual, i) if not casilla_objetivo.validar_posicion(): continue pieza_casilla_objetivo = self.obtener_pieza_de_casilla( casilla_objetivo) if i == casilla_inicial.columna: if pieza_casilla_objetivo == 0: posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) if color_de_pieza == 'B' and casilla_inicial.fila == 6: fila_actual = casilla_objetivo.fila casilla_objetivo = Posicion.Posicion( casilla_objetivo.fila - 1, i) # pieza_casilla_objetivo = self.obtener_pieza_de_casilla( casilla_objetivo) if pieza_casilla_objetivo == 0: posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) elif color_de_pieza == 'N' and casilla_inicial.fila == 1: fila_actual = casilla_objetivo.fila casilla_objetivo = Posicion.Posicion( casilla_objetivo.fila + 1, i) # pieza_casilla_objetivo = self.obtener_pieza_de_casilla( casilla_objetivo) if pieza_casilla_objetivo == 0: posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) else: if pieza_casilla_objetivo != 0: if self.calculando_movimiento: tmp_color_objetivo = self.obtener_color_de_pieza( casilla_objetivo) if tmp_color_objetivo == color_de_pieza: break posible_movimiento = Movimiento.Movimiento( casilla_inicial, casilla_objetivo) posibles_movimientos.append(posible_movimiento) return posibles_movimientos