echecs.py

Created by ississkerrouche67

Created on September 10, 2024

8.67 KB


from parties_echecs import *
class Y(Z):
 def st(sf,o=1):
  sf.__init__();sf.p=[[C(sf,x,y)for y in rg(8)]for x in rg(8)];sf.Y=[None]*2;sf.pb=[[],[]];sf.t=1;sf.rt=0;sf.sc=0;sf.l=0;sf.pe=""
  for x in rg(8):sf.p[x][1]=Q(sf,x,1,1);sf.p[x][6]=Q(sf,x,6,0)
  for n in -1,1:sf.p[it(3.5+3.5*n)][0]=T(sf,it(3.5+3.5*n),0,1);sf.p[it(3.5+3.5*n)][7]=T(sf,it(3.5+3.5*n),7,0);sf.p[it(3.5+2.5*n)][0]=V(sf,it(3.5+2.5*n),0,1);sf.p[it(3.5+2.5*n)][7]=V(sf,it(3.5+2.5*n),7,0);sf.p[it(3.5+1.5*n)][0]=F(sf,it(3.5+1.5*n),0,1);sf.p[it(3.5+1.5*n)][7]=F(sf,it(3.5+1.5*n),7,0)
  sf.p[3][0]=D(sf,3,0,1);sf.p[3][7]=D(sf,3,7,0);sf.p[4][0]=R(sf,4,0,1,sf.p[0][0],sf.p[7][0]);sf.p[4][7]=R(sf,4,7,0,sf.p[0][7],sf.p[7][7]);sf.r=[sf.p[4][7],sf.p[4][0]]
  if o:sf.m()
 def sw(sf,o=1):
  sf.__init__();cg=sum(pe,"")
  try:
   sf.p=[[C(sf,x,y)for y in rg(8)]for x in rg(8)];sf.Y=[None]*2;sf.pb=[[],[]];sf.r=[None,None];sf.sc=0;p,ff,v,sf.pe=cg.split("|")
   for x,l in ee(p.split("/")):
    for y,o in ee(l.split(" ")):
     if o:
      a=o.split(",");np=N[a[0].lower()](sf,x,y,a[0]not in N,cg=a[1:])
      if z(np)is R:sf.r[a[0]not in N]=np
      else:sf.sc+=np.pn*(1 if np.c else -1)
      sf.p[x][y]=np
   for i,lst in ee(ff.split("/")):
    for j,pc in ee(lst.split()):pc=pc.split(",");sf.pb[i].append(N[pc[0].lower()](sf,j%8,8.3+(j//8)if i else -1.3-(j//8),i,cg=pc[1:]))
   for o in sf.r:
    xx,yy=o.bt
    if yy==it(yy):xx,yy=it(xx),it(yy);o.bt=sf.p[xx][yy]
    else:
     if o.c:o.bt=sf.pb[1][it(xx+8*(yy==-2.3))]
     else:o.bt=sf.pb[0][it(xx+8*(yy==9.3))]
    xx,yy=o.tb
    if yy==it(yy):xx,yy=it(xx),it(yy);o.tb=sf.p[xx][yy]
    else:
     if o.c:o.tb=sf.pb[1][it(xx+8*(yy==-2.3))]
     else:o.tb=sf.pb[0][it(xx+8*(yy==9.3))]
   sf.t,sf.rt,sf.l=map(it,v.split())
  except E as e:sf.s.e("Erreur chargement partie :"," La partie est corrompue" if cg else " La partie n'existe pas",repr(e));return sf.st(o)
  if o:sf.m()
 def sa(sf):
  try:
   sf.d()
   while 1:
    try:sf.s.h()
    except(H,K):bk()
  except J:
   if ga(sf,"r",0)and all(sf.r):q("Pour sauvegarder la partie,\ncopiez les lignes suivantes et\ncollez-les entres les crochets\ndans le script parties_echecs");q(gm)
 def gs(sf):return [j for i in sf.p for j in i if(j.c==sf.t and j.t())]
 def vb(sf,mv,sv=1):
  if mv["pb"]:
   if sv:sf.pe+=":"+mv["pb"].n+sr(mv["pb"].x)+sr(mv["pb"].y)
   nc=C(sf,mv["pb"].x,mv["pb"].y);sf.p[mv["pb"].x][mv["pb"].y]=nc;nc.d();lb=len(sf.pb[mv["pb"].c]);mv["pb"].x=lb % 8
   if not mv["pb"].c:mv["pb"].y=-1.3-(lb//8);mv["pb"].d(cl=CCB,ps=se[1])
   else:mv["pb"].y=8.3+(lb//8);mv["pb"].d(cl=CCN,ps=se[0])
   sf.pb[mv["pb"].c].append(mv["pb"]);sf.sc+=mv["pb"].pn*(-1 if mv["pb"].c else 1)
  elif sv:sf.pe+=":"
 def ve(sf):
  try:gk(1)
  except(O):sf.s.o()
 def d(sf):
  if se["y"]:c1,c2=CCN,CCB
  else:c1,c2=CCB,CCN
  d(0,0,59,222,c1);d(261,0,59,222,c2)
  for i in sf.pb[0]:sf.ve();i.d(cl=CCB,ps=se[1])
  for i in sf.pb[1]:sf.ve();i.d(cl=CCN,ps=se[0])
  d(59,0,202,19,CD);dt("ECHECS by Issam",60,0,CX,CD);d(59,19,202,203,CX)
  for i in sf.p:
   for j in i:sf.ve();j.d()
  sf.ve()
  if sf.ms:
   for sp in sf.ms:rd(sp["x"],sp["y"])
   st(*sf.sd)
  elif sf.sd:x,y=sf.sd;sf.p[x][y].d(il=1)
 def gn(sf,pc):
  if sf.w:return sf.pp
  if pc.c:
   ck=CCN;ps=[D(sf,2,4,1),V(sf,3,4,1),T(sf,4,4,1),F(sf,5,4,1)];pt=[[C(sf,i,j)for j in rg(8)]for i in rg(8)]
   for i in ps:pt[i.x][i.y]=i
   x,y=g(2,4)[::se["i"]]
  else:
   ck=CCB;ps=[D(sf,2,3,0),V(sf,3,3,0),T(sf,4,3,0),F(sf,5,3,0)];pt=[[C(sf,i,j)for j in rg(8)]for i in rg(8)]
   for i in ps:pt[i.x][i.y]=i
   x,y=g(2,3)[::se["i"]]
  if se["y"]:d(*[x+30,y+30][::se["i"]]+[-35,-25*4-10][::se["i"]]+[ck])if se["x"]else d(*[x+30,y-5][::se["i"]]+[-35,25*4+10][::se["i"]]+[ck])
  else:d(*[x-5,y+30][::se["i"]]+[35,-25*4-10][::se["i"]]+[ck]) if se["x"]else d(*[x-5,y-5][::se["i"]]+[35,25*4+10][::se["i"]]+[ck])
  for i in ps:sf.ve();i.d(cl=ck)
  xx,yy=ps[0].x,ps[0].y;ps[0].d(cl=ck,il=1);k=-1
  try:
   while k!=4:
    try:k=gk(g=1)
    except O:
     sf.s.o()
     if se["y"]:d(*[x+30,y+30][::se["i"]]+[-35,-25*4-10][::se["i"]]+[ck])if se["x"]else d(*[x+30,y-5][::se["i"]]+[-35,25*4+10][::se["i"]]+[ck])
     else:d(*[x-5,y+30][::se["i"]]+[35,-25*4-10][::se["i"]]+[ck]) if se["x"]else d(*[x-5,y-5][::se["i"]]+[35,25*4+10][::se["i"]]+[ck])
     for i in ps:sf.ve();i.d(cl=ck)
     pt[xx][yy].d(cl=ck,il=1);continue
    lx,ly=xx,yy;xx,yy=sm(pt,xx,yy,k);pt[lx][ly].d(cl=ck);pt[xx][yy].d(cl=ck,il=1)
  except(Fw,Bk,K)as e:bk();[(sf.ve(),sf.p[i][j].d())for i in rg(1,7)for j in rg(2,6)];raise e
  [(sf.ve(),sf.p[i][j].d())for i in rg(1,7)for j in rg(2,6)];return pt[xx][yy]
 def f(sf):
  dt(" "*5,265-260*se["y"],2,CW,CCN);dt(" "*5,5+260*se["y"],2,CW,CCB)
  if sf.s.sc and sf.sc:
   if sf.sc>0:dt(" +"+("" if sf.sc//10 else " ")+sr(sf.sc),5+260*se["y"],2,CX,CCB)
   else:dt(" +"+("" if sf.sc//10 else " ")+sr(abs(sf.sc)),265-260*se["y"],2,CX,CCN)
  if sf.s.w:
   if sf.t:
    if sf.r[1].ec():dt("ECHEC",5+260*se["y"],2,CW,CCB)
   else:
    if sf.r[0].ec():dt("ECHEC",265-260*se["y"],2,CW,CCN)
  sa=[],[]
  for lign in sf.p:
   for o in lign:
    if o:sa[o.c].append(o.n)
  r=""
  if len(sa[0])==len(sa[1])==1:r="NULLE"
  else:
   for i,j in(1,0),(0,1):
    if len(sa[i])==1:
     if len(sa[j])==3 and sa[j].count("c")==2:r="NULLE"
     elif len(sa[j])==2 and("c" in sa[j]or "f" in sa[j]):r="NULLE"
  if not sf.gs():r=" PAT "
  if sf.r[sf.t].ec()and r==" PAT ":
   if sf.t:dt(" MAT ",5+260*se["y"],2,CW,CCB)
   else:dt(" MAT ",265-260*se["y"],2,CW,CCN)
  else:dt(r,265-260*se["y"],2,CW,CCN);dt(r,5+260*se["y"],2,CW,CCB)
  return r+" "
 def fw(sf):
  for i in sf.Y:
   if i!=None:i.sd=0;i.d()
  if len(sf.pe.split())==sf.rt-sf.l:return
  if sf.t:sf.t=0
  else:sf.t=1
  nv=sf.pe.split()[sf.rt-sf.l].split(":");dx,dy=map(it,nv[0]);ax,ay=map(it,nv[1]);pe=sf.p[dx][dy]
  if nv[2]:xx,yy=map(it,nv[2][1:]);pf=sf.p[xx][yy]
  else:pf=None
  try:sf.pp=N[nv[3]](sf,ax,ay,pe.c);sf.w=1
  except IndexError:0
  sf.Y=pe.b(m(ax,ay,pf),sv=0);sf.w=0;sf.rt+=1
 def kb(sf):
  if sf.rt-sf.l:sf.rt-=1
  else:return
  if sf.t:sf.t=0
  else:sf.t=1
  lv=sf.pe.split()[sf.rt-sf.l].split(":");dx,dy=map(it,lv[0]);ax,ay=map(it,lv[1]);pc=sf.p[ax][ay];pc.x,pc.y=dx,dy;sf.p[dx][dy]=pc;pc.sd=0;pc.d();nc=C(sf,ax,ay);sf.p[ax][ay]=nc;nc.sd=0;nc.d()
  try:
   if lv[3]:sf.sc-=(N[lv[3]].pn-1)*(1 if sf.t else -1);np=Q(sf,dx,dy,pc.c);np.gt=pc.gt;sf.p[dx][dy]=np;np.d()
  except IndexError:0
  if lv[2]:
   if pc.c:pf=sf.pb[0].pop()
   else:pf=sf.pb[1].pop()
   pf.d(jg=1,cl=CCN if pf.c else CCB);sf.sc-=pf.pn*(-1 if pf.c else 1);pf.x,pf.y=map(it,lv[2][1:]);sf.p[pf.x][pf.y]=pf;pf.d()
  if z(pc)is Q:
   if abs(dx-ax)==2:pc.gt=0
  elif z(pc)is R:
   if sf.rt==pc.v:pc.v=0
   if dx-ax==2:t=pc.bt;t.x=0;t.v=0;sf.p[t.x][t.y]=t;t.d();sf.p[ax+1][t.y]=C(sf,ax+1,ay);sf.p[ax+1][t.y].d()
   elif ax-dx==2:
    t=pc.tb;t.x=7;t.v=0;sf.p[t.x][t.y]=t;t.d();sf.p[ax-1][t.y]=C(sf,ax-1,ay);sf.p[ax-1][t.y].d()
  elif z(pc)is T:
   if pc.v==sf.rt:pc.v=0
  if sf.rt-sf.l:lv=sf.pe.split()[sf.rt-sf.l-1].split(":");dx,dy=map(it,lv[0]);ax,ay=map(it,lv[1]);sf.Y=[sf.p[dx][dy],sf.p[ax][ay]]
  else:sf.Y=[None]*2
  sf.f()
 def m(sf):
  if not ga(sf,"r",0)or not all(sf.r):sf.sw(0)
  if not sf.s.c:sf.d()
  while 1:
   if sf.f()==" PAT " and sf.s.c:se.update(sf.s.b);sf.d()
   elif sf.s.c:se.update(sf.s.ss[sf.t]);sf.d()
   while sf.f():
    for i in sf.Y:
     if i!=None:i.sd=1;i.d()
    ps=sf.gs()
    if ps:
     pt=[[C(i,j)for j in rg(8)]for i in rg(8)]
     for i in ps:pt[i.x][i.y]=i
     x,y=ps[0].x,ps[0].y;ps[0].d(il=1);sf.sd=x,y
    k=-1
    try:
     while k!=4:
      try:k=gk(g=1)
      except O:sf.s.o();continue
      if ps:lx,ly=x,y;x,y=sm(pt,x,y,k);sf.sd=x,y;sf.p[lx][ly].d();sf.p[x][y].d(il=1)
    except(Bk,Fw)as e:
     if ps:sf.p[x][y].d()
     sf.sd=None
     if z(e)is Bk:sf.kb()
     else:sf.fw()
     continue
    pd=sf.p[x][y];pd.sd=1;pd.d()
    for i in sf.Y:
     if i is not None:i.sd=0;i.d()
    ms=pd.t();sf.ms=ms;mt=[[0]*8 for i in rg(8)]
    for i in ms:mt[i["x"]][i["y"]]=i;rd(i["x"],i["y"])
    k=-1;x,y=ms[0]["x"],ms[0]["y"];sf.sd=x,y;st(x,y)
    try:
     while k!=4:
      try:k=gk(g=1)
      except O:sf.s.o();continue
      lx,ly=x,y;x,y=sm(mt,x,y,k);sf.sd=x,y;sf.p[lx][ly].d();rd(lx,ly);st(x,y)
     sf.sd=None;sf.ms=[]
     for i in ms:sf.ve();sf.p[i["x"]][i["y"]].d()
     sf.pe=" ".join(sf.pe.split()[:sf.rt-sf.l]);sf.pe+=" "
     if sf.pe.startswith(" "):sf.pe=sf.pe[1:]
     if len(sf.pe)>LP:
      ib=0;dec=0
      while len(sf.pe)-ib>LP:
       ib+=1
       if sf.pe[ib]==" ":dec+=1
      while sf.pe[ib]!=" ":
       ib+=1
       if sf.pe[ib]==" ":dec+=1;break
      sf.l+=dec;sf.pe=sf.pe[ib+1:]
     sf.Y=pd.b(mt[x][y])
    except(K,Bk,Fw)as e:
     bk();sf.sd=None;sf.ms=[]
     for i in ms:sf.ve();sf.p[i["x"]][i["y"]].d()
     pd.sd=0;pd.d()
     if z(e)is Bk:sf.kb()
     elif z(e)is Fw:sf.fw()
     continue
    sf.rt+=1
    if sf.t:sf.t=0
    else:sf.t=1
    break
gm=Y();gm.sa()

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.