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
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
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
def conv(self, pos): f, c = Movimientos.posFC(pos) return chr(c + 97) + str(f + 1)