es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Imprima el tablero de ajedrez a partir de una lista de objetos.

Tengo la siguiente tarea de imprimir en la pantalla las piezas del tablero de ajedrez, deben estar en este formato ♔ pero esto es lo menos importante.

Si hago un bucle, obtengo esto , ¿cómo puedo codificar –> si main.Rook == ♖?

La salida cuando se complete el código debería ser así:

♖ ♔  
 ♜  ♜
 ♚ ♜ 
♖   ♗
♗    

en este momento construyo el tablero de esta manera

class Pieza:
    pos_x : int 
    pos_y : int
    lado_ : bool #True para Blanco y False para Negro
    def init(self, pos_x : int, pos_y : int, lado_ : bool):
        '''establece los valores iniciales'''
        self.pos_x=pos_x 
        self.pos_y=pos_y
        self.lado_=lado_ #¿quizás establecerlo como True?
def __str__(self):#
    return f"{self.pos_x} {self.pos_y} {self.lado_}"

def get_lado(self):
    return lado_
class Torre(Pieza):
    def init(self, pos_x : int, pos_y : int, lado_ : bool):
        '''establece los valores iniciales llamando al constructor de Pieza'''
        super().init(pos_x, pos_y, lado_)
    def repr(self):
        if self.lado_==False:
            return "♜" 
        else:
            return "♖" 
wr1 = Torre(1,2,True)
br1 = Torre(4,3,False)
br2 = Torre(2,4,False)
br3 = Torre(5,4,False)
wr2 = Torre(1,5,True)
B1 = (10, [wr1,br1, br2, br3, wr2])

Así que ahora estoy trabajando en la siguiente función, no he avanzado mucho, puedo obtener la posición de la pieza, el lado, etc., pero ¿cómo sabría si son TORRE u otra cosa, si tuviera una variable podría usar su nombre, por ejemplo, pero aquí tengo un objeto, ¿alguien puede ilustrar un método de cómo abordar esto?

def conf2unicode(B: Board) -> str: 
    '''convierte la configuración del tablero B a una cadena de formato unicode (ver sección Configuraciones del tablero en Unicode)'''
    for pieza in B[1]:
        print(pieza)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es usar la función isinstance() para verificar si un objeto dado es una instancia de una clase en particular. En este caso, podemos verificar si una pieza es una Torre usando isinstance(piece, Rook).

    Aquí hay una versión actualizada de la función conf2unicode() que demuestra este enfoque:

    def conf2unicode(B: Board) -> str:
        # inicializar el tablero como una matriz 2D de espacios
        board = [[' ' for _ in range(8)] for _ in range(8)]
    
        # colocar las piezas en el tablero según sus posiciones
        for piece in B[1]:
            x, y = piece.pos_x - 1, piece.pos_y - 1
            if isinstance(piece, Rook):
                if piece.side_:
                    board[x][y] = '♖'
                else:
                    board[x][y] = '♜'
            # añadir más condiciones aquí para otros tipos de piezas
    
        # convertir el tablero a formato de cadena
        output = ''
        for row in board:
            output += ' '.join(row) + '\n'
        return output
    

    Esta función primero inicializa el tablero como una matriz 2D de espacios. Luego recorre todas las piezas en el tablero y verifica su tipo usando isinstance(). Si la pieza es una Torre, actualiza la posición correspondiente en el tablero con ‘♖’ o ‘♜’ dependiendo de su lado.

    Puedes añadir más condiciones para manejar otros tipos de piezas. Finalmente, la función convierte el tablero a un formato de cadena uniendo las filas con espacios y agregando un carácter de nueva línea al final de cada fila.

Comments are closed.