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)
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()
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
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
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()