Ce jeu d’échecs nécessite deux autres scripts pieces_echecs.py et parties_echecs.py disponible sur mon compte numworks Caucaucybu. 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 condensée ici. Pour l’utiliser il vaut mieux bien savoir utiliser le script de base.
Vous pouvez trouvez d’autres jeux comme un jeu de farming sur mon compte NumWorks : Caucaucybu.
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("La partie a ete interrompue.\nPour la reprendre, entrez \nrestart()\nPour l'enregistrer, entrez \ndonnees_partie()") def donnees_partie(): print("Copiez les lignes suivantes et\ncollez-les aux endroits\ncorrespondants dans le script\nparties_echecs.") for i in range(99999):pass print("","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 charger("chargement partie enregistre");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() def charger(t=0): if not t:t="chargement" if t==" ":print() else:print(t+"...") for i in range(16):print() 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("Ce script d'echecs necessite\nabsolument pour fonctionner 2\nautres scripts pieces_echecs\net parties_echecs disponible\nsur mon compte numworks\nCaucaucybu ici :\nhttps://my.numworks.com/python\n/caucaucybu/pieces_echecs\nhttps://my.numworks.com/python\n/caucaucybu/parties_echecs") elif bug_piec:print("Ce script d'echecs necessite\nabsolument pour fonctionner un\nautre script pieces_echecs.py\ndisponible sur mon compte\nnumworks Caucaucybu ici :\nhttps://my.numworks.com/python\n/caucaucybu/pieces_echecs") elif bug_part:print("Ce script d'echecs necessite\nabsolument pour fonctionner un\nautre script parties_echecs.py\ndisponible sur mon compte\nnumworks Caucaucybu ici :\nhttps://my.numworks.com/python\n/caucaucybu/parties_echecs") else: charger(" ") print("Bienvenue sur ce jeu d'echecs\ndeveloppe par Caucaucybu !") for i in range(9999):pass charger(" ") print("Vous pouvez entrer :\n-\"jeu\" pour commencer une\nnouvelle partie\n-\"tutoriel\" pour comprendre\ncomment jouer\n-\"continuer\" pour continuer la\npartie enregistree") rep=input("\n ->") if rep=="continuer": try:restart([pieces_noires]+[pieces_blanches]+[pieces_mangees_noires]+[pieces_mangees_blanches]+[autres_parametres]) except:print("Il n'y as pas de partie\nenregistre ou les donnees\nsont incompletes ou erronees.") elif rep=="tutoriel": charger();print("Deplacez la zone grisee vers\nla piece a jouer avec les\nfleches, puis appuyez sur OK.\nLes deplacements possibles\nvont vous etre propose.\nChoisissez le bon avec les\nfleches puis appuyez sur OK.\nS'il y a echec mat ou pat par\nimpossibilite de bouger ce\nsera indiques en haut a droite\nou a gauche de l'ecran.") elif rep=="jeu": charger();print("Cette version possede\ndifferents modes de jeu.\nVous pouvez entrer :\n-\"normal\" pour jouer un\nun contre un\n-\"aleatoire\" pour voir une\npartie jouee aleatoirement\n-\"bot_noir\" / \"bot_blanc\" pour\njouer contre un bot") rep=input("\n ->") if rep=="aleatoire": charger("chargement partie aleatoire");print("Vous pouvez interrompre\nl'execution et jouer vous-meme\nen restant appuye sur la\ntouche 0.") for i in range(19999):pass charger(" ");jeu(1) elif rep=="normal":charger("chargement partie normale");jeu(0) elif rep=="bot_blanc":charger("en attente bot_blanc");jeu(-1) elif rep=="bot_noir":charger("en attente bot_noir");jeu(-10) else:charger("chargement nouvelle partie");jeu(0) elif rep=="aleatoire": charger("chargement partie aleatoire");print("Vous pouvez interrompre\nl'execution et jouer vous-meme\nen restant appuye sur la\ntouche 0.") for i in range(19999):pass charger(" ");jeu(1) elif rep=="normal":charger("chargement partie normale");jeu(0) elif rep=="bot_blanc":charger("en attente bot_blanc");jeu(-1) elif rep=="bot_noir":charger("en attente bot_noir");jeu(-10) else:charger("chargement nouvelle partie");jeu(0)