Ce jeu d’échecs nécessite deux autres scripts pieces_echecs.py et parties_echecs.py disponible sur mon compte numworks Caucaucybu. Pour les modes de jeu il y a continuer pour continuer la partie enregistrée, aleatoire pour voir une partie aleatoire, bot_blanc et bot_noir pour jouer contre un bot ou jeu pour jouer. On peut interrompre le jeu aleatoire et jouer soi-même en appuyant sur la touche 0. Si la partie est interrompue, on peut la relancer en tapant restart() ou l’enregistrez pour la continuer plus tard en tapant donnees_partie() puis en copiant les lignes qui s’affichent et en les collant dans les lignes correspondantes dans le script parties_echecs. Vous pouvez modifiez les couleurs en haut du script pieces_echecs avec les variables blanc, noir et plt (plt c’est les deux couleurs du plateau). Ce script existe dans une version plus explicite ici.
from ion import keydown as keyp from random import randint aleat=0;ke=[0,0,0,0,0,0];rbb=rnb=tgb=tgn=tdb=tdn=1;rb=(0,4);rn=(7,4);pbb=pbhb=pbhn=pbn=0;grey=(165,166,165) clf_av=[-5,-5,(0,0,0)];clf_ap=[-5,-6,"nopiece",(0,0,0)] def keydown(k): if keyp(k) or ke[k]:return 1 def kerand(): global ke if not keyp(48):ke=[randint(0,1) for i in range(6)] else:ke=[0,0,0,0,0,0] def fin(): try: while keydown(5):pass except KeyboardInterrupt:fin() def sauver(tour): global svg svg_pbb=[];svg=[];svg_pbn=[];tr=tour for k in (0,-1): svg.append([]) for i in range(8): for j in range(8): tst=chercher(i,j) if tst and tst[1]==k:svg[k].append((i,j,tst[0])) for i in range(9,7,-1): for j in range(7,0,-1): tst=chercher(i+0.4,j,1) if not tst[1]:svg_pbn.append((i+0.4,j,tst[0])) else:break if tst[1]:break for i in range(-2,0): for j in range(7,-1,-1): tst=chercher(i-0.4,j,1) if tst[1]==-1:svg_pbb.append((i-0.4,j,tst[0])) else:break if tst[1]!=-1:break svg.append(svg_pbn);svg.append(svg_pbb);svg.append([pbb,pbhb,pbhn,pbn,rb,rn,rnb,rbb,tdb,tdn,tgb,tgn,clf_av,clf_ap,tr,alea,aleat]) def navig(tour): global pbb,pbhb,pbhn,pbn,rb,rn,rnb,rbb,tdb,tdn,tgb,tgn,clf_av,clf_ap,ke sauver(tour);clf_ap_svg=clf_ap.copy();clf_av_svg=clf_av.copy();chess0=chess1=0;mat0=1;mat1=1 pcsb=[svg[1][i][2] for i in range(len(svg[1]))];pcsn=[svg[0][i][2] for i in range(len(svg[0]))];del pcsb[pcsb.index("k")];del pcsn[pcsn.index("k")];ln=len(pcsn);lb=len(pcsb) if not echec(rn[0],rn[1],0):txt("ECHEC",265,3,(255,0,0),noir);chess0=1 else:draw(265,3,50,18,noir) for i in svg[0]: depiece(i[0],i[1]);tst=chpsb(i[0],i[1],i[2],0);repiece0(i[0],i[1],i[2]) if tst:mat0=0;break if mat0 and not tour: if chess0:txt(" MAT ",265,3,(255,0,0),noir) else:txt(" PAT ",265,3,(255,0,0),noir) return 1 if not echec(rb[0],rb[1],-1):txt("ECHEC",5,3,(255,0,0),blanc);chess1=1 else:draw(5,3,50,18,blanc) for i in svg[1]: depiece(i[0],i[1]);tst=chpsb(i[0],i[1],i[2],-1);repiece1(i[0],i[1],i[2]) if tst:mat1=0;break if mat1 and tour==-1: if chess1:txt(" MAT ",5,3,(255,0,0),blanc) else:txt(" PAT ",5,3,(255,0,0),blanc) return 1 if (lb==0 and ln==0) or (lb==0 and ln==1 and (pcsn[0]=="f" or pcsn[0]=="c")) or (ln==0 and lb==1 and (pcsb[0]=="f" or pcsb[0]=="c")):txt(" PAT ",5,3,(255,0,0));txt(" PAT ",265,3,(255,0,0),(0,0,0));return 1 while 1: if not tour:c=chpiece(tour,7,-1) else:c=chpiece(tour,0,1) if aleat:kerand() else:ke=[0,0,0,0,0,0] while not keydown(4): if keydown(1): while keydown(1): if aleat:kerand() if not tour: w(c[0],c[1],c[2]) c=chpiece(tour,c[0],-1,c[1],-1) else: r(c[0],c[1],c[2]) c=chpiece(tour,c[0],1,c[1],-1) if keydown(2): while keydown(2): if aleat:kerand() if not tour: w(c[0],c[1],c[2]) c=chpiece(tour,c[0],-1,c[1],1) else: r(c[0],c[1],c[2]) c=chpiece(tour,c[0],1,c[1],1) if keydown(0): while keydown(0): if aleat:kerand() if not tour: w(c[0],c[1],c[2]) c=chpiece(tour,c[0]-1,-1,c[1]+1,-1) else: r(c[0],c[1],c[2]) c=chpiece(tour,c[0]-1,1,c[1]-1,1) if keydown(3): while keydown(3): if aleat:kerand() if not tour: w(c[0],c[1],c[2]) c=chpiece(tour,c[0]+1,-1,c[1]-1,1) else: r(c[0],c[1],c[2]) c=chpiece(tour,c[0]+1,1,c[1]+1,-1) if aleat:kerand() try: while keydown(4): if aleat:kerand() rang=0;go=1;depiece(c[0],c[1]);psb=chpsb(c[0],c[1],c[2],tour);psb.sort() try: psb[0] depiece(clf_av[0],clf_av[1],clf_av[2]);depiece(clf_ap[0],clf_ap[1],clf_ap[3]);clf=get(xn(c[0]),yn(c[1]));depiece(c[0],c[1],grey) if aleat:kerand() if not tour:repiece0(c[0],c[1],c[2]);repiece1(clf_ap[0],clf_ap[1],clf_ap[2]) else:repiece1(c[0],c[1],c[2]);repiece0(clf_ap[0],clf_ap[1],clf_ap[2]) for i in psb:repieceg(tour,i,c[2]) while not keydown(4): if go:gris(psb[rang][0],psb[rang][1]);repieceg(tour,psb[rang],c[2]);go=0 if keydown(2) and len(psb)!=1: while keydown(2): if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repieceg(tour,psb[rang],c[2]) rang+=1;go=1 if rang==len(psb):rang=0 if keydown(1) and len(psb)!=1: while keydown(1): if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repieceg(tour,psb[rang],c[2]) rang-=1;go=1 if rang==-1:rang=len(psb)-1 if keydown(0) and len(psb)!=1: while keydown(0): if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repieceg(tour,psb[rang],c[2]);arang=rang;rang-=1;go=1 if rang==-1:rang=len(psb)-1 while psb[arang][0]==psb[rang][0]: rang-=1 if rang==-1:rang=len(psb)-1 if rang==arang: rang-=1 if rang==-1:rang=len(psb)-1 break if keydown(3) and len(psb)!=1: while keydown(3): if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repieceg(tour,psb[rang],c[2]);arang=rang;rang+=1;go=1 if rang==len(psb):rang=0 while psb[arang][0]==psb[rang][0]: rang+=1 if rang==len(psb):rang=0 if rang==arang: rang+=1 if rang==len(psb):rang=0 break if aleat:kerand() while keydown(4): if aleat:kerand() for i in range(len(psb)): depiece(psb[i][0],psb[i][1]) if len(psb[i])==3: if not tour:repiece1(psb[i][0],psb[i][1],psb[i][2]) else:repiece0(psb[i][0],psb[i][1],psb[i][2]) except IndexError:pass depiece(c[0],c[1]) try: if len(psb[rang])>2: if psb[rang][2]!="roque": depiece(psb[rang][0],psb[rang][1]) if not tour: repiece0(9.4-pbhn,7-pbn,psb[rang][2],blanc);pbn+=1 if pbn==8:pbhn+=1;pbn=0 else: repiece1(-2.4+pbhb,7-pbb,psb[rang][2],noir);pbb+=1 if pbb==8:pbhb+=1;pbb=0 if len(psb[rang])==5:depiece(psb[rang][3],psb[rang][4]) else: pos=(psb[rang][0],psb[rang][1]) if pos==(0,6):depiece(0,7);tourb(0,5) if pos==(0,2):depiece(0,0);tourb(0,3) if pos==(7,6):depiece(7,7);tourn(7,5) if pos==(7,2):depiece(7,0);tourn(7,3) pcs=["r","t","c","f"];rng=0;clf_ap=[psb[rang][0],psb[rang][1],c[2],get(xn(psb[rang][0]),yn(psb[rang][1]))] if not tour: repiece0(psb[rang][0],psb[rang][1],c[2]) if c[2]=="p" and psb[rang][0]==0: depiece(psb[rang][0],psb[rang][1]);repiece0(psb[rang][0],psb[rang][1],pcs[rng]);gris(psb[rang][0],psb[rang][1]) if aleat:kerand() while not keydown(4): if keydown(0) or keydown(1): while keydown(0) or keydown(1): if aleat:kerand() rng+=1 if rng==4:rng=0 depiece(psb[rang][0],psb[rang][1]);repiece0(psb[rang][0],psb[rang][1],pcs[rng]);gris(psb[rang][0],psb[rang][1]) if keydown(3) or keydown(2): while keydown(3) or keydown(2): if aleat:kerand() rng+=1 if rng==4:rng=0 depiece(psb[rang][0],psb[rang][1]);repiece0(psb[rang][0],psb[rang][1],pcs[rng]);gris(psb[rang][0],psb[rang][1]) if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repiece0(psb[rang][0],psb[rang][1],pcs[rng]);clf_ap[2]=pcs[rng] else: repiece1(psb[rang][0],psb[rang][1],c[2]) if c[2]=="p" and psb[rang][0]==7: depiece(psb[rang][0],psb[rang][1]);gris(psb[rang][0],psb[rang][1]);repiece1(psb[rang][0],psb[rang][1],pcs[rng]) if aleat:kerand() while not keydown(4): if keydown(0) or keydown(1): while keydown(0) or keydown(1): if aleat:kerand() rng+=1 if rng==4:rng=0 depiece(psb[rang][0],psb[rang][1]);gris(psb[rang][0],psb[rang][1]);repiece1(psb[rang][0],psb[rang][1],pcs[rng]) if keydown(3) or keydown(2): while keydown(3) or keydown(2): if aleat:kerand() rng+=1 if rng==4:rng=0 depiece(psb[rang][0],psb[rang][1]);gris(psb[rang][0],psb[rang][1]);repiece1(psb[rang][0],psb[rang][1],pcs[rng]) if aleat:kerand() depiece(psb[rang][0],psb[rang][1]);repiece1(psb[rang][0],psb[rang][1],pcs[rng]);clf_ap[2]=pcs[rng] if c[2]=="k": if not tour:rnb=0;rn=(psb[rang][0],psb[rang][1]) else:rbb=0;rb=(psb[rang][0],psb[rang][1]) if c[2]=="t": if c[1]==0: if not tour:tgn=0 else:tgb=0 if c[1]==7: if not tour:tdn=0 else:tdb=0 depiece(clf_ap[0],clf_ap[1],grey);clf_av=[c[0],c[1],clf] if not tour:repiece0(clf_ap[0],clf_ap[1],clf_ap[2]) else:repiece1(clf_ap[0],clf_ap[1],clf_ap[2]) while keydown(4): if aleat:kerand() break except IndexError: if not tour:repiece0(c[0],c[1],c[2]) else:repiece1(c[0],c[1],c[2]) except KeyboardInterrupt: fin() try: for i in range(len(psb)): depiece(psb[i][0],psb[i][1]) if len(psb[i])==3: if not tour:repiece1(psb[i][0],psb[i][1],psb[i][2]) else:repiece0(psb[i][0],psb[i][1],psb[i][2]) except NameError:pass clf_av=clf_av_svg.copy();clf_ap=clf_ap_svg.copy();depiece(c[0],c[1],clf);depiece(clf_av[0],clf_av[1],grey);depiece(clf_ap[0],clf_ap[1],grey) if not tour:repiece0(c[0],c[1],c[2]);repiece1(clf_ap[0],clf_ap[1],clf_ap[2]) else:repiece1(c[0],c[1],c[2]);repiece0(clf_ap[0],clf_ap[1],clf_ap[2]) def inter():print("restart()\ndonnees_partie()") def donnees_partie():print("Copiez les lignes suivantes","","pieces_noires :\n"+str(svg[0]),"\npieces_blanches :\n"+str(svg[1]),"\npieces_mangees_noires :\n"+str(svg[2]),"\npieces_mangees_blanches :\n"+str(svg[3]),"\nautres_parametres :\n"+str(svg[4])) def restart(partie=0): global pbb,pbhb,pbhn,pbn,rb,rn,rnb,rbb,tdb,tdn,tgb,tgn,clf_av,clf_ap,tour,aleat,alea if not partie:partie=svg pbb=partie[4][0];pbhb=partie[4][1];pbhn=partie[4][2];pbn=partie[4][3];rb=partie[4][4];rn=partie[4][5];rnb=partie[4][6];rbb=partie[4][7] tdb=partie[4][8];tdn=partie[4][9];tgb=partie[4][10];tgn=partie[4][11];clf_av=partie[4][12];clf_ap=partie[4][13];tour=partie[4][14];alea=partie[4][15];aleat=partie[4][16] plateau();depiece(clf_av[0],clf_av[1],grey);depiece(clf_ap[0],clf_ap[1],grey) for j in range(2): for i in partie[j]: if not j:repiece0(i[0],i[1],i[2]) else:repiece1(i[0],i[1],i[2]) for i in partie[3]:repiece1(i[0],i[1],i[2],(0,0,0)) for i in partie[2]:repiece0(i[0],i[1],i[2],(255,255,255)) if not tour: try: while 1: if navig(0):break if alea==-10:aleat=0 elif alea==-1:aleat=1 if navig(-1):break if alea==-10:aleat=1 elif alea==-1:aleat=0 except KeyboardInterrupt:inter() else: try: while 1: if navig(-1):break if alea==-10:aleat=1 elif alea==-1:aleat=0 if navig(0):break if alea==-10:aleat=0 elif alea==-1:aleat=1 except KeyboardInterrupt:inter() def jeu(aleation): global aleat,alea if not aleation or aleation==-10:aleat=0 else:aleat=1 alea=aleation;plateau();reineb(0,3);reinen(7,3);roin(7,4);roib(0,4) for i in (0,7):tourb(0,i);tourn(7,i) for i in range(8):pionb(1,i);pionn(6,i) for i in (1,6):cavalierb(0,i);cavaliern(7,i) for i in (2,5):foub(0,i);foun(7,i) try: while 1: if navig(-1):break if aleation==-10:aleat=1 elif aleation==-1:aleat=0 if navig(0):break if aleation==-10:aleat=0 elif aleation==-1:aleat=1 except KeyboardInterrupt:inter() try: from parties_echecs import * bug_part=0 except ImportError:bug_part=1 try: from pieces_echecs import * bug_piec=0 except ImportError:bug_piec=1 if bug_piec and bug_part:print("necessite pieces_echecs et parties_echecs") elif bug_piec:print("necessite pieces_echecs.py") elif bug_part:print("necessite parties_echecs.py") else: rep=input("entrez mode de jeu : ") if rep=="continuer": try:restart([pieces_noires]+[pieces_blanches]+[pieces_mangees_noires]+[pieces_mangees_blanches]+[autres_parametres]) except:print("Erreur") elif rep=="aleatoire":jeu(1) elif rep=="normal":jeu(0) elif rep=="bot_blanc":jeu(-1) elif rep=="bot_noir":jeu(-10) else:jeu(0)