示例#1
0
    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
示例#2
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)
示例#3
0
    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()
示例#4
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
示例#5
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)
示例#6
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
示例#7
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()
示例#8
0
    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
示例#9
0
 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
示例#10
0
 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
示例#11
0
    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()
示例#12
0
    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()
示例#13
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
示例#14
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
示例#15
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()
示例#16
0
 def allPV(self):
     return Movimientos.xpv2pv(self._xpv)
示例#17
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()
示例#18
0
 def allPV(self):
     return Movimientos.xpv2pv(self._xpv)