示例#1
0
    def posAtacada(self, pos):

        f, c = Movimientos.posFC(pos)

        FCpos = Movimientos.FCpos

        def mp(fi, ci, contras):
            for x in range(1, 8):
                ft = f + fi * x
                if ft < 0 or ft > 7:
                    break
                ct = c + ci * x
                if ct < 0 or ct > 7:
                    break
                pt = FCpos(ft, ct)
                pz = self.tb[pt]
                if pz:
                    return pz in contras

        contras = "rq" if self.siW else "RQ"
        for fi, ci in ((+1, 0), (-1, 0), (0, +1), (0, -1)):
            if mp(fi, ci, contras):
                return True

        contras = "qb" if self.siW else "QB"
        for fi, ci in ((+1, +1), (-1, -1), (+1, -1), (-1, +1)):
            if mp(fi, ci, contras):
                return True

        def mp1(contra, li):
            if self.siW:
                contra = contra.lower()
            for fi, ci in li:
                ft = f + fi
                if ft < 0 or ft > 7:
                    continue
                ct = c + ci
                if ct < 0 or ct > 7:
                    continue
                pt = FCpos(ft, ct)
                pz = self.tb[pt]
                if pz == contra:
                    return True

        # Caballo
        if mp1("N", ((+1, +2), (+1, -2), (-1, +2), (-1, -2), (+2, +1),
                     (+2, -1), (-2, +1), (-2, -1))):
            return True

        # Peon
        if mp1("P", ((+1, +1), (+1, -1)) if self.siW else
               ((-1, -1), (-1, +1))):
            return True

        # Rey
        if mp1("K", ((+1, +1), (+1, -1), (-1, +1), (-1, -1), (+1, 0), (-1, 0),
                     (0, +1), (0, -1))):
            return True

        return False
示例#2
0
    def posAtacada(self, pos):

        f, c = Movimientos.posFC(pos)

        FCpos = Movimientos.FCpos

        def mp(fi, ci, contras):
            for x in range(1, 8):
                ft = f + fi * x
                if ft < 0 or ft > 7:
                    break
                ct = c + ci * x
                if ct < 0 or ct > 7:
                    break
                pt = FCpos(ft, ct)
                pz = self.tb[pt]
                if pz:
                    return pz in contras

        contras = "rq" if self.siW else "RQ"
        for fi, ci in ( (+1, 0), (-1, 0), (0, +1), (0, -1) ):
            if mp(fi, ci, contras):
                return True

        contras = "qb" if self.siW else "QB"
        for fi, ci in ( (+1, +1), (-1, -1), (+1, -1), (-1, +1) ):
            if mp(fi, ci, contras):
                return True

        def mp1(contra, li):
            if self.siW:
                contra = contra.lower()
            for fi, ci in li:
                ft = f + fi
                if ft < 0 or ft > 7:
                    continue
                ct = c + ci
                if ct < 0 or ct > 7:
                    continue
                pt = FCpos(ft, ct)
                pz = self.tb[pt]
                if pz == contra:
                    return True

        # Caballo
        if mp1("N", ( (+1, +2), (+1, -2), (-1, +2), (-1, -2), (+2, +1), (+2, -1), (-2, +1), (-2, -1) )):
            return True

        # Peon
        if mp1("P", ( (+1, +1), (+1, -1) ) if self.siW else ( (-1, -1), (-1, +1) )):
            return True

        # Rey
        if mp1("K", ( (+1, +1), (+1, -1), (-1, +1), (-1, -1), (+1, 0), (-1, 0), (0, +1), (0, -1) )):
            return True

        return False
示例#3
0
 def hazK(pos):
     f, c = Movimientos.posFC(pos)
     for fi, ci, pts in lidomk:
         ft = f + fi
         if ft < 0 or ft > 7:
             continue
         ct = c + ci
         if ct < 0 or ct > 7:
             continue
         pt = FCpos(ft, ct)
         if pts > dom[pt]:
             dom[pt] = pts
示例#4
0
 def hazK(pos):
     f, c = Movimientos.posFC(pos)
     for fi, ci, pts in lidomk:
         ft = f + fi
         if ft < 0 or ft > 7:
             continue
         ct = c + ci
         if ct < 0 or ct > 7:
             continue
         pt = FCpos(ft, ct)
         if pts > dom[pt]:
             dom[pt] = pts
示例#5
0
 def conv(self, pos):
     f, c = Movimientos.posFC(pos)
     return chr(c + 97) + str(f + 1)
示例#6
0
 def conv(self, pos):
     f, c = Movimientos.posFC(pos)
     return chr(c + 97) + str(f + 1)