def ayuda(self): self.hints += 1 self.tablero.quitaFlechas() self.ponSiguiente() pa = self.camino[0 if self.baseUnica else self.posActual] ps = self.camino[self.posActual + 1] tlist = Movimientos.liNMinimo(pa, ps, self.celdas_ocupadas) if self.nayuda >= len(tlist): self.nayuda = 0 li = tlist[self.nayuda] for x in range(len(li) - 1): d = Movimientos.posA1(li[x]) h = Movimientos.posA1(li[x + 1]) self.tablero.creaFlechaMov(d, h, "2") self.nayuda += 1
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 readID(self, id): db = Base.DBBase(self._db) dbf = db.dbfT("data", "LEVEL,WHITE,CABS,MOVS", condicion="ROWID=%d" % id) dbf.leer() dbf.gotop() self.nivel = dbf.LEVEL siBlancas = dbf.WHITE self.siJugamosConBlancas = siBlancas self.siRivalConBlancas = not siBlancas pv = Movimientos.xpv2pv(dbf.MOVS) self.partidaObj = Partida.Partida() self.partidaObj.leerPV(pv) self.posJugadaObj = 0 self.numJugadasObj = self.partidaObj.numJugadas() self.cabs = collections.OrderedDict() li = dbf.CABS.split("\n") for x in li: if x: clave, valor = x.split('=') self.cabs[clave] = valor dbf.cerrar() db.cerrar()
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 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 mueveHumano(self, desde, hasta): p0 = Movimientos.a1Pos(desde) p1 = Movimientos.a1Pos(hasta) if p1 in Movimientos.dicN[p0]: self.moves += 1 self.movesParcial += 1 self.ponNumMoves() if p1 not in self.camino: return False self.cpActivo.casillas[desde] = None self.cpActivo.casillas[hasta] = "N" if self.siBlancas else "n" self.tablero.ponPosicion(self.cpActivo) self.tablero.activaColor(self.siBlancas) self.posTemporal = p1 if p1 == self.camino[self.posActual + 1]: self.avanza() return True return True return False
def ponSiguiente(self): posDesde = self.camino[0 if self.baseUnica else self.posActual] posHasta = self.camino[self.posActual + 1] tlist = Movimientos.liNMinimo(posDesde, posHasta, self.celdas_ocupadas) self.numMoves = len(tlist[0]) - 1 self.movesParcial = 0 cp = self.cpInicial.copia() self.posTemporal = posDesde ca = Movimientos.posA1(posDesde) cp.casillas[ca] = "N" if self.siBlancas else "n" cs = Movimientos.posA1(posHasta) cp.casillas[cs] = "k" if self.siBlancas else "K" self.cpActivo = cp self.tablero.ponPosicion(cp) self.tablero.activaColor(self.siBlancas) self.ponNumMoves()
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()
def allPV(self): return Movimientos.xpv2pv(self._xpv)