示例#1
0
        def hazFEN(fen, ply, seq):
            plyN = ply + 1
            siWhite = " w " in fen
            siMax = False
            if whiteBest:
                siMax = siWhite
            if blackBest:
                siMax = siMax or not siWhite

            liPV = book.miraListaPV(fen, siMax)
            for pv in liPV:
                cp.leeFen(fen)
                cp.mover(pv[:2], pv[2:4], pv[4:])
                fenN = cp.fen()
                reg = SQLDBF.Almacen()
                lireg.append(reg)
                reg.PV = pv
                seqN = seq + Movimientos.pv2xpv(pv)
                reg.XPV = seqN
                reg.COMMENT = ""
                reg.NAG = 0
                reg.FEN = fenN
                reg.ADV = 0
                self.ultPos += 1
                reg.POS = self.ultPos
                tmpBP2.ponTotal(1, self.ultPos - basePos)
                tmpBP2.pon(1, self.ultPos - basePos)
                if plyN < depth:
                    fenM2 = cp.fenM2()
                    if fenM2 not in stFenM2:
                        stFenM2.add(fenM2)
                        hazFEN(fenN, plyN, seqN)
示例#2
0
    def unGM(self, gm):
        fichero = os.path.join(self.carpeta, "%s.gmi" % gm)
        if self.validFile(fichero):
            f = open(fichero)
            liPartidas = f.read().strip().split("\n")
            f.close()

            dicPVs = {}
            for siBlancas in (True, False):
                self.leePartidasPV(gm, dicPVs, siBlancas)

            numSiError = -1  # para que haya siempre una, por el historico
            for num, pv in dicPVs.iteritems():
                if pv:
                    numSiError = num
                    break
            repe = 0
            if numSiError >= 0:
                fichero = os.path.join(self.carpeta, "%s.xgm" % gm)
                q = open(fichero, "wb")
                for num, datos in enumerate(liPartidas):
                    pv = dicPVs.get(num, None)
                    if not pv:
                        pv = dicPVs[numSiError]
                        datos = liPartidas[numSiError]
                        repe += 1
                    datos = datos.replace("|", "-").replace(VarGen.XSEP, "|")
                    q.write("%s||%s\n" % (Movimientos.pv2xpv(pv.strip()), datos))
                q.close()
示例#3
0
 def addMoves(moves, depth, seq):
     for mv in moves.liMoves:
         if depth > maxDepth:
             break
         seqM1 = seq
         pv = mv.pv
         seq += Movimientos.pv2xpv(pv)
         reg = SQLDBF.Almacen()
         reg.PV = pv
         reg.XPV = seq
         reg.COMMENT = "\n".join(mv.comentarios)
         reg.FEN = mv.fen
         reg.NAG = 0
         reg.ADV = 0
         self.ultPos += 1
         reg.POS = self.ultPos
         for critica in mv.criticas:
             if critica.isdigit():
                 t = int(critica)
                 if t in (4, 2, 1, 3, 5, 6):
                     reg.NAG = t
                 elif t in (11, 14, 15, 16, 17, 18, 19):
                     reg.ADV = t
             else:
                 if critica in dnag:
                     reg.NAG = dnag[critica]
         liReg.append(reg)
         if mv.variantes:
             for variante in mv.variantes:
                 addMoves(variante, depth, seqM1)
         depth += 1
示例#4
0
        def hazFEN(fen, ply, seq):
            plyN = ply + 1
            siWhite = " w " in fen
            siMax = False
            if whiteBest:
                siMax = siWhite
            if blackBest:
                siMax = siMax or not siWhite

            liPV = book.miraListaPV(fen, siMax)
            for pv in liPV:
                cp.leeFen(fen)
                cp.mover(pv[:2], pv[2:4], pv[4:])
                fenN = cp.fen()
                reg = SQLDBF.Almacen()
                lireg.append(reg)
                reg.PV = pv
                seqN = seq + Movimientos.pv2xpv(pv)
                reg.XPV = seqN
                reg.COMMENT = ""
                reg.NAG = 0
                reg.FEN = fenN
                reg.ADV = 0
                self.ultPos += 1
                reg.POS = self.ultPos
                tmpBP2.ponTotal(1, self.ultPos - basePos)
                tmpBP2.pon(1, self.ultPos - basePos)
                if plyN < depth:
                    fenM2 = cp.fenM2()
                    if fenM2 not in stFenM2:
                        stFenM2.add(fenM2)
                        hazFEN(fenN, plyN, seqN)
示例#5
0
 def addMoves(moves, depth, seq):
     for mv in moves.liMoves:
         if depth > maxDepth:
             break
         seqM1 = seq
         pv = mv.pv
         seq += Movimientos.pv2xpv(pv)
         reg = SQLDBF.Almacen()
         reg.PV = pv
         reg.XPV = seq
         reg.COMMENT = "\n".join(mv.comentarios)
         reg.FEN = mv.fen
         reg.NAG = 0
         reg.ADV = 0
         self.ultPos += 1
         reg.POS = self.ultPos
         for critica in mv.criticas:
             if critica.isdigit():
                 t = int(critica)
                 if t in (4, 2, 1, 3, 5, 6):
                     reg.NAG = t
                 elif t in (11, 14, 15, 16, 17, 18, 19):
                     reg.ADV = t
             else:
                 if critica in dnag:
                     reg.NAG = dnag[critica]
         liReg.append(reg)
         if mv.variantes:
             for variante in mv.variantes:
                 addMoves(variante, depth, seqM1)
         depth += 1
示例#6
0
 def dameMovimiento(self, father, pv):
     mv = UnMove(self, father)
     xpv = father.xpv() + Movimientos.pv2xpv(pv)
     mv.xpv(xpv)
     mv.pv(pv)
     cp = ControlPosicion.ControlPosicion()
     cp.leeFen(father.fen())
     cp.moverPV(pv)
     mv.fen(cp.fen())
     self.ultPos += 1
     mv.pos(self.ultPos)
     father.addChildren(mv)
     self.pteGrabar(mv)
     return mv
示例#7
0
 def dameMovimiento(self, father, pv):
     mv = UnMove(self, father)
     xpv = father.xpv() + Movimientos.pv2xpv(pv)
     mv.xpv(xpv)
     mv.pv(pv)
     cp = ControlPosicion.ControlPosicion()
     cp.leeFen(father.fen())
     cp.moverPV(pv)
     mv.fen(cp.fen())
     self.ultPos += 1
     mv.pos(self.ultPos)
     father.addChildren(mv)
     self.pteGrabar(mv)
     return mv
示例#8
0
    def generarStandard(self, ventana, siBasic):

        oLista = AperturasStd.ListaAperturasStd(self.configuracion, True, True)
        dic = oLista.dic

        titulo = _("Openings")
        tmpBP2 = QTUtil2.BarraProgreso2(ventana, titulo)
        tf = len(dic)
        tmpBP2.ponTotal(1, tf)
        tmpBP2.ponRotulo(1, "1. " + _X(_("Reading %1"), titulo))
        tmpBP2.ponTotal(2, tf)
        tmpBP2.ponRotulo(2, "")
        tmpBP2.mostrar()

        liRegs = []
        dRegs = {}  # se guarda una lista con los pv, para determinar el padre
        for nR, k in enumerate(oLista.dic):
            tmpBP2.pon(1, nR)
            tmpBP2.siCancelado()
            ae = oLista.dic[k]
            if siBasic and not ae.siBasic:
                continue
            liPV = ae.a1h8.split(" ")

            ult = len(liPV) - 1
            seqFather = ""
            cp = ControlPosicion.ControlPosicion()
            cp.posInicial()
            for pos, pv in enumerate(liPV):
                desde, hasta, coronacion = pv[:2], pv[2:4], pv[4:]
                seq = seqFather + Movimientos.pv2xpv(pv)
                cp.mover(desde, hasta, coronacion)

                if seq not in dRegs:
                    reg = SQLDBF.Almacen()
                    reg.XPV = seq
                    reg.PV = pv
                    reg.FEN = cp.fen()
                    reg.COMMENT = ae.trNombre if pos == ult else ""
                    self.ultPos += 1
                    reg.POS = self.ultPos

                    liRegs.append(reg)
                    dRegs[seq] = reg

                seqFather = seq

        tmpBP2.ponRotulo(2, "2. " + _X(_("Converting %1"), titulo))
        tmpBP2.ponTotal(2, len(liRegs))

        select = "XPV,PV,COMMENT,FEN,POS"
        dbf = SQLDBF.DBF(self.conexion, self.tablaDatos, select)

        def dispatch(num):
            tmpBP2.pon(2, num)
            tmpBP2.siCancelado()

        dbf.insertarLista(liRegs, dispatch)
        dbf.cerrar()

        tmpBP2.cerrar()
示例#9
0
    def generarStandard(self, ventana, siBasic):

        oLista = AperturasStd.ListaAperturasStd(self.configuracion, True, True)
        dic = oLista.dic

        titulo = _("Openings")
        tmpBP2 = QTUtil2.BarraProgreso2(ventana, titulo)
        tf = len(dic)
        tmpBP2.ponTotal(1, tf)
        tmpBP2.ponRotulo(1, "1. " + _X(_("Reading %1"), titulo))
        tmpBP2.ponTotal(2, tf)
        tmpBP2.ponRotulo(2, "")
        tmpBP2.mostrar()

        liRegs = []
        dRegs = {}  # se guarda una lista con los pv, para determinar el padre
        for nR, k in enumerate(oLista.dic):
            tmpBP2.pon(1, nR)
            tmpBP2.siCancelado()
            ae = oLista.dic[k]
            if siBasic and not ae.siBasic:
                continue
            liPV = ae.a1h8.split(" ")

            ult = len(liPV) - 1
            seqFather = ""
            cp = ControlPosicion.ControlPosicion()
            cp.posInicial()
            for pos, pv in enumerate(liPV):
                desde, hasta, coronacion = pv[:2], pv[2:4], pv[4:]
                seq = seqFather + Movimientos.pv2xpv(pv)
                cp.mover(desde, hasta, coronacion)

                if seq not in dRegs:
                    reg = SQLDBF.Almacen()
                    reg.XPV = seq
                    reg.PV = pv
                    reg.FEN = cp.fen()
                    reg.COMMENT = ae.trNombre if pos == ult else ""
                    self.ultPos += 1
                    reg.POS = self.ultPos

                    liRegs.append(reg)
                    dRegs[seq] = reg

                seqFather = seq

        tmpBP2.ponRotulo(2, "2. " + _X(_("Converting %1"), titulo))
        tmpBP2.ponTotal(2, len(liRegs))

        select = "XPV,PV,COMMENT,FEN,POS"
        dbf = SQLDBF.DBF(self.conexion, self.tablaDatos, select)

        def dispatch(num):
            tmpBP2.pon(2, num)
            tmpBP2.siCancelado()

        dbf.insertarLista(liRegs, dispatch)
        dbf.cerrar()

        tmpBP2.cerrar()