parties_echecs.py

Created by caucaucybu

Created on June 25, 2024

7.05 KB


from pieces_echecs import *
from ion import keydown as ke
CW=(255,125,123)
CX=(99,60,0)
CD=(239,154,66)
CR=(255,0,0)
CU=(140,134,140)
class R(P):
 n="r";pn=ft("inf");dn=[1024]+[3584]*3+[32704,65504,32704,396812,986654,1966071,1638371,1576451,1838599,921102,462364,233016,101936]+[52832]*2+[262136]*2
 def __init__(sf,gm=None,x=-1,y=-1,c=-1,bt=None,tb=None,*a,**ka):
  sf.bt,sf.tb=bt,tb;sf.v=0;super().__init__(gm,x,y,c,*a,**ka)
 def __repr__(sf):return super().__repr__()+","+",".join([sr(sf.bt.x),sr(sf.bt.y),sr(sf.tb.x),sr(sf.tb.y)])
 def sg(sf,cg):sf.v=it(cg[0]);sf.bt,sf.tb=map(ft,cg[1:3]),map(ft,cg[3:])
 def t(sf):
  ms=[]
  for i in 1,-1,0:
   for j in 1,-1,0:
    if(i or j)and ii(sf.x+i)and ii(sf.y+j):
     ct=sf.gm.p[sf.x+i][sf.y+j]
     if not ct:
      if sf.tg(sf.x+i,sf.y+j):ms.append(m(sf.x+i,sf.y+j))
     elif cf(sf,ct):
      if sf.tg(sf.x+i,sf.y+j):ms.append(m(sf.x+i,sf.y+j,ct))
  if not sf.sl and not sf.v and not sf.ec():
   sf.gm.p[sf.x][sf.y]=None
   for i in 1,2:
    if sf.gm.p[sf.x+i][sf.y]or not sf.tg(sf.x+i,sf.y):break
   else:
    if not sf.tb.v:ms.append(m(sf.x+i,sf.y))
   for i in -1,-2:
    if sf.gm.p[sf.x+i][sf.y]or not sf.tg(sf.x+i,sf.y):break
   else:
    if not sf.bt.v and not sf.gm.p[1][sf.y]:ms.append(m(sf.x+i,sf.y))
   sf.gm.p[sf.x][sf.y]=sf
  return ms
 def b(sf,mv,sv=1):
  if not sf.v:sf.v=sf.gm.rt
  if sf.x-mv["x"]==2:sf.bt.b(m(mv["x"]+1,sf.y),0)
  elif mv["x"]-sf.x==2:sf.tb.b(m(mv["x"]-1,sf.y),0)
  return super().b(mv,sv)
 def ec(sf):
  a=sf.gm,sf.x,sf.y,sf.c;ka={"sl":1};c=V(*a,**ka);t=T(*a,**ka);f=F(*a,**ka);p=Q(*a,**ka);r=R(*a,**ka)
  for i in c.t():
   if z(i["pb"])is V and cf(i["pb"],sf):return 1
  for i in t.t():
   if(z(i["pb"])is T or z(i["pb"])is D)and cf(i["pb"],sf):return 1
  for i in f.t():
   if(z(i["pb"])is F or z(i["pb"])is D)and cf(i["pb"],sf):return 1
  for i in p.t():
   if z(i["pb"])is Q and cf(i["pb"],sf):return 1
  for i in r.t():
   if z(i["pb"])is R and cf(i["pb"],sf):return 1
  return 0
N["r"]=R
def bk():
 try:
  while ke(5):0
 except K:bk()
class Bk(E):0
class Fw(E):0
class O(E):0
class J(E):0
class H(E):0
ks=[[-1,1]for i in rg(6)];lv=-1
def gk(s=0,g=0):
 global lv;tt=h()
 if s and tt-lv<.05:return
 lv=tt
 while 1:
  if ke(6):p(.3);raise H()
  if ke(8):p(.3);raise O()
  if ke(5):
   if ks[5][0]==-1:ks[5][0]=0;raise K
  else:
   if not ks[5][0]:ks[5][0]=-1
  if ke(48):raise J
  if s:return
  for i in rg(5):
   if ke(i):
    if ks[i][0]==-1:ks[i][0]=h();return i
    elif ks[i][1]and h()-ks[i][0]>.3:ks[i][0]=h();ks[i][1]=0;return i
    elif not ks[i][1]and h()-ks[i][0]>0.07:ks[i][0]=h();return i
   else:
    if ks[i][0]!=-1:ks[i]=[-1,1]
  if g and ke(12):
   while ke(12):0
   raise Bk()
  if g and ke(17):
   while ke(17):0
   raise Fw()
def sm(p,x,y,k):
 pv=[[p[j][i]for j in rg(len(p[0]))]for i in rg(len(p))]
 def mvm(x,y,p,pi,r,pri=1):
  if pri:
   if r[0]<0 and any(p[x][max(y-len(p[0])+1,0):y])or r[0]>0 and any(p[x][y+1:min(y+len(p[0])-1,len(p[0]))]):
    for i in rg(y+r[0],*r[1:]):
     if p[x][i]:return x,i
  for i in rg(y+r[0],*r[1:]):
   if any(pi[i]):
    for j in rg(max(x,len(p[0])-1-x)+1):
     for s in 1,-1:
      if ii(x+j*s)and pi[i][x+j*s]:return x+j*s,i
  return x,y
 if se["i"]==-1:
  if not k:k=1
  elif k==1:k=0
  elif k==2:k=3
  elif k==3:k=2
 if not k:
  if se["y"]:k=3
 elif k==3:
  if se["y"]:k=0
 elif k==1:
  if se["x"]:k=2
 elif k==2:
  if se["x"]:k=1
 if not k:
  if se["i"]==-1:pri=1
  else:pri=0
  return mvm(x,y,p,pv,(-1,-1,-1),pri)
 elif k==3:
  if se["i"]==-1:pri=1
  else:pri=0
  return mvm(x,y,p,pv,(1,len(p[0])),pri)
 elif k==2:
  if se["i"]==1:pri=1
  else:pri=0
  return list(mvm(y,x,pv,p,(1,len(p[0])),pri))[::-1]
 elif k==1:
  if se["i"]==1:pri=1
  else:pri=0
  return list(mvm(y,x,pv,p,(-1,-1,-1),pri))[::-1]
 else:
  return x,y
def fn():raise J()
class S:
 def __init__(sf,gm,w=1,sc=1,c=1):sf.gm,sf.w,sf.sc,sf.c=gm,w,sc,c;sf.ss=[{0:(1,-1),1:(1,-1),"x":1,"y":0,"i":-1},{0:(1,-1),1:(1,-1),"x":0,"y":1,"i":-1}];sf.b={i:ga(se[i],"copy",lambda:se[i])()for i in se}
 def h(sf):
  r=" Nouvelle partie","Continuer partie"," Charger partie ","   Parametres   ","     Quitter    ";a=sf.gm.st,sf.gm.m,sf.gm.sw,sf.p,fn;s=0;d(65,25,190,190,CD);k=-1
  for i,v in ee(r):dt(v,80,40+i*35,CX,CD)
  while k!=4:
   dt(">"+r[s]+"<",70,40+s*35,CR,CD)
   try:k=gk()
   except O:
    sf.o();d(65,25,190,190,CD)
    for i,v in ee(r):dt(v,80,40+i*35,CX,CD)
    continue
   except(K,H):
    bk()
    if ga(sf.gm,"r",0)and all(sf.gm.r):s=1;break
    else:raise J()
   dt(" "+r[s]+" ",70,40+s*35,CX,CD);s+=(k==2)-(k==1)-(k==3)-(k==0);s%=len(r)
  try:a[s]()
  except(J,H,K)as e:raise e
  except E as e:sf.e(e)
 def p(sf):
  d(65,25,190,190,CD);s=0;ts=0;p=Q(sf.gm,3,3,1),Q(sf.gm,3,4,0),Q(sf.gm,4,3,1),Q(sf.gm,4,4,0);pt=(1,-1),(1,1),(-1,-1),(-1,1);tt={"x":0,"y":0,"i":1},{"x":0,"y":1,"i":-1},{"x":1,"y":1,"i":1},{"x":1,"y":0,"i":-1};av=[0]*3
  if ts==1:g=sf.ss[1]
  elif ts==2:g=sf.ss[0]
  else:g=sf.b
  for i in rg(4):
   tp=tt[i]
   if g["x"]==tp["x"]and g["y"]==tp["y"]and g["i"]==tp["i"]:av[0]=i
   if g[1]==pt[i]:av[1]=i
   if g[0]==pt[i]:av[2]=i
  op=(" Ne pas changer "," Changer plateau"),(" Tout les tours ","   Tour blanc   ","    Tour noir   "),"Tourner plateau"," Tourner blancs"," Tourner noirs ";ca=(op[0][sf.c],op[1][ts])-op[2:];ds=(35,58,135,160,185);dt("<"+ca[0]+">",70,35,CR,CD);dt(ca[1],80,58,CX if sf.c else CU,CD)
  for i in p:i.d(decy=-15)
  for i,v in ee(op[2:]):dt(v,80,135+25*i,CX,CD)
  while 1:
   try:k=gk()
   except O:sf.o();continue
   dt(" "+ca[s]+" ",70,ds[s],CX,CD);s+=(k==2)-(k==1);s%=5
   if s==1 and not sf.c:s+=(k==2)-(k==1)
   if k in(0,3,4):
    if s==0:
     sf.c=not sf.c
     if not sf.c:ts=0;dt(op[1][0],80,ds[1],CU,CD)
     else:dt(op[1][ts],80,ds[1],CX,CD)
    elif s==1:
     ts+=(k==4)+(k==3)-(k==0);ts%=3
     if ts==1:g=sf.ss[1]
     elif ts==2:g=sf.ss[0]
     else:g=sf.b
     for i in rg(4):
      tp=tt[i]
      if g["x"]==tp["x"]and g["y"]==tp["y"]and g["i"]==tp["i"]:av[0]=i
      if g[1]==pt[i]:av[1]=i
      if g[0]==pt[i]:av[2]=i
    else:av[s-2]+=(k==4)+(k==3)-(k==0);av[s-2]%=4
    if ts==1:g=sf.ss[1]
    elif ts==2:g=sf.ss[0]
    else:g=sf.b
    g.update({1:pt[av[1]],0:pt[av[2]]});g.update(tt[av[0]]);se.update(g)
   ca=(op[0][sf.c],op[1][ts])+op[2:]
   for i in p:i.d(decy=-15)
   dt("<"+ca[s]+">",70,ds[s],CR,CD)
 def o(sf):
  d(0,0,320,222,(0,)*3)
  while 1:
   try:gk()
   except(E,K)as e:
    bk()
    if z(e)is O:sf.gm.d();return
 def e(sf,*m):
  q("-"*6+" Error "+"-"*6)
  if m:
   for a in m:q(a)
  else:q("Unknow Error")
  q("-"*19);d(10,70,300,60,CR)
  if m:
   for i,a in ee(m):dt(sr(a),30,75+20*i,CW,CR)
  else:dt("Unknow Error",60,90,CW,CR)
  try:gk()
  except O:sf.o()
  except K:bk()
  except:0
class Z:
 def __init__(sf):
  if not ga(sf,"p",0):sf.s=S(sf)
  sf.w,sf.sd,sf.ms=0,None,[];sf.p=[[C(sf,x,y)for y in rg(8)]for x in rg(8)];sf.pb=[[],[]]
 def __repr__(sf):
  p="/".join([" ".join(map(repr,i))for i in sf.p]);ps="/".join([" ".join(map(repr,sf.pb[i]))for i in(0,1)]);v=" ".join([sr(sf.t),sr(sf.rt),sr(sf.l)]);e="|".join([p,ps,v,sf.pe]);s=""
  for _ in rg(len(e)//200+1):s,e=s+"\""+e[:200]+"\",\n",e[200:]
  return s
LP=250

pe=[
# Coller ici les lignes
# de la partie que vous
# voulez sauvegarder






]

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 <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.