Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
    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