Beispiel #1
0
    def __init__(self):
        """Inicializador de la clase."""
        if len(argv) > 2:
            self.msjError("No coinciden los parametros." + USO)

        self.terminado = False
        self.caballo = Caballo()
Beispiel #2
0
 def createPieces(self, completPieces):
     pieces = []
     i = 0
     for p in self.piecesPosition:
         if not p:
             pieces.append(False)
         else:
             #Creation of the King
             if i == 0:
                 pieces.append(Rey(self.piecesPosition[i], completPieces))
             #Creation of the Queen
             if i == 1:
                 pieces.append(Dama(self.piecesPosition[i], completPieces))
             #Creation of the Rocks
             if i == 2 or i == 3:
                 pieces.append(Torre(self.piecesPosition[i], completPieces))
             #Creation of the Bishops
             if i == 4 or i == 5:
                 pieces.append(
                     Alfil(self.piecesPosition[i], self.completPieces))
             #Creation of the Horses
             if i == 6 or i == 7:
                 pieces.append(
                     Caballo(self.piecesPosition[i], self.completPieces))
             #Creation of the Pawns
             else:
                 pieces.append(
                     Caballo(self.piecesPosition[i], self.completPieces,
                             self.color))
         i = i + 1
     return pieces
Beispiel #3
0
class Tablero():
    """Clase de prueba"""
    def __init__(self):
        """Inicializador de la clase."""
        if len(argv) > 2:
            self.msjError("No coinciden los parametros." + USO)

        self.terminado = False
        self.caballo = Caballo()

    def movimientoDelCaballo(self, parametro="DEFAULT"):
        """Método principal para recorrer el tablero.
            :parameter:
                - parametro: Tamaño del tablero."""
        if parametro != "DEFAULT":
            self.validarParametro(parametro)

        if parametro != "DEFAULT":
            self.rangoTablero = int(parametro)
        else:
            self.rangoTablero = self.caballo.getTablero()

        self.tablero = [["   " for i in xrange(self.rangoTablero)] for i in xrange(self.rangoTablero)]

        self.caballo.setTablero(self.rangoTablero)
        self.dibujarCaballo()
        self.dibujarTablero()
        self.jugar(0)

        print "No hay solución"

    def jugar(self, contador):
        """Método recursivo encargado de recorrer el tablero.
            :parameter:
                - contador: Número de la jugada."""
        contador = contador + 1
        pos = self.caballo.getXY()

        movimientosPosibles = self.movimientosPosibles()
        movimientosPosibles = self.mejorCamino(movimientosPosibles)

        for movimiento in movimientosPosibles:
            pos_ant = pos
            self.dibujarContador(contador)
            self.moverCaballo(movimiento)
            self.dibujarTablero()
            if self.tableroLleno():
                print "Completado!"
                exit(0)
            pos = self.caballo.getXY()
            self.jugar(contador)
            self.moverCaballoBorrar(pos, pos_ant)
            pos = self.caballo.getXY()
            self.dibujarTablero()

    def mejorCamino(self, posPosibles):
        """Método encargado de buscar el mejor camino dentro de las jugadas existentes.
            :parameter:
                - posPosibles: Lista de posiciones posibles (jugadas)."""
        listaPosibles = []
        for movimiento in posPosibles:
            movActual = self.caballo.getXY()
            self.moverCaballo(movimiento)
            posibles = len(self.movimientosPosibles())
            x, y = movimiento[1]
            self.moverCaballoBorrar((int(x), int(y)), movActual)
            listaPosibles.append(posibles)
        return self.ordenar(listaPosibles, posPosibles)

    def ordenar(self, listaNumPosibles, listaOrdenar):
        """Método encargado de ordenar de mayor a menor la lista de posibilidades.
            :parameter:
                - listaNumPosibles: Lista con el numero de caminos posibles para cada jugada.
                - listaOrdenar: Lista de posiciones posibles (jugadas)."""
        for i in range(len(listaNumPosibles)):
            for j in range(len(listaNumPosibles) -1):
                if listaNumPosibles[j] > listaNumPosibles[j+1]:
                    listaOrdenar[j], listaOrdenar[j+1] = listaOrdenar[j+1], listaOrdenar[j]
                    listaNumPosibles[j], listaNumPosibles[j+1] = listaNumPosibles[j+1], listaNumPosibles[j]

        return listaOrdenar

    def movimientosPosibles(self):
        """Método encargado de entregar las posiciones posibles (jugadas)."""
        movimentosCaballo = self.caballo.movimientosPosibles()
        movimientos = []
        for mov in movimentosCaballo:
            x, y = mov[1]
            if self.tablero[x][y] == "   ":
                movimientos.append(mov)
        return movimientos

    def moverCaballo(self, movimiento):
        """Método encargado mover la posición del caballo.
            :parameter:
                - movimiento: Movimiento -> list[str(codigo), (x, y)]."""
        if movimiento[0] == "SDL":
            self.caballo.movSupDerLar(True)
        if movimiento[0] == "SIL":
            self.caballo.movSupIzqLar(True)
        if movimiento[0] == "SDC":
            self.caballo.movSupDerCor(True)
        if movimiento[0] == "SIC":
            self.caballo.movSupIzqCor(True)
        if movimiento[0] == "IDL":
            self.caballo.movInfDerLar(True)
        if movimiento[0] == "IIL":
            self.caballo.movInfIzqLar(True)
        if movimiento[0] == "IDC":
            self.caballo.movInfDerCor(True)
        if movimiento[0] == "IIC":
            self.caballo.movInfIzqCor(True)

        self.dibujarCaballo()

    def moverCaballoBorrar(self, pos, nuevaPos):
        """Método encargado mover el caballo a una posición y borrar su posición anterior.
            :parameter:
                - pos: Posición a borrar -> (x, y).
                - nuevaPos: Nueva posición -> (x, y)"""
        self.tablero[pos[0]][pos[1]] = "   "
        self.caballo.setXY(nuevaPos[0], nuevaPos[1])
        self.dibujarCaballo()

    def dibujarCaballo(self):
        """Método encargado de dibujar el caballo."""
        self.tablero[self.caballo.getX()][self.caballo.getY()] = '°M~'  # Si, es un caballo.

    def dibujarContador(self, contador):
        """Método encargado de dibujar el contador.
            :parameter:
                - contador: Número de la jugada."""
        if(contador < 10):
            self.tablero[self.caballo.getX()][self.caballo.getY()] = '  ' + str(contador)
        elif(contador < 100):
            self.tablero[self.caballo.getX()][self.caballo.getY()] = ' ' + str(contador)
        else:
            self.tablero[self.caballo.getX()][self.caballo.getY()] = str(contador)

    def tableroLleno(self):
        """Método encargado de verificar si el tablero está completo."""
        for y in range(self.rangoTablero):
            for x in range(self.rangoTablero):
                if self.tablero[x][y] == "   ":
                    return False
        return True

    def dibujarTablero(self):
        """Método encargado de dibujar el tablero."""
        self.limpiarPantalla()
        print "\n"
        for y in range(self.rangoTablero):
            fila = "\t| "
            for x in range(self.rangoTablero):
                fila = fila + str(self.tablero[x][y]) + " | "
            print fila
        print
        sleep(DELAY)

    def limpiarPantalla(self):
        """Método encargado de limpiar la pantalla"""
        if platform == LINUX or platform == MACOS:
           system('clear')
        elif platform == WINDOWS:
            system('cls')

    def validarParametro(self, parametro):
        """Método encargado de validar que el parámetro ingresado sea correcto.
            :parameter:
                - parametro: Parámetro a validar."""
        try:
            validar = int(parametro)
            if validar < 0:
                self.msjError("El parametro debe ser un entero positivo.")
            elif validar < 5:
                self.msjError("El tamaño mínimo del tablero debe ser 5x5.")
        except ValueError:
            self.msjError("El parametro debe ser un entero positivo.")

    def msjError(self, mensaje):
        """Método encargado de desplegar un mensaje de error.
            :parameter:
                - mensaje: Mensaje de error."""
        print "[" + strftime("%H:%M:%S") + "] ERROR: " + mensaje
        exit(0)