Jeu du Taquin, dont le but est de remettre des nombres dans l’ordre, en faisant glisser un nombre dans une case vide. Se joue avec les 4 flèches directionnelles. On peut choisir la taille de la grille et un mode de résolution automatique mais pas optimisé et uniquement pour une grille de taille inférieur ou égale à 4 (sinon il faut modifier le script et réduire le nombre de mouvements pour le mélange).
from random import * from ion import * from kandinsky import * from time import * while 1: fill_rect(0,0,320,222,"white") n=4 draw_string("Taille de la grille",70,50,"orange") draw_string("< >",140,70,"blue") while keydown(KEY_EXE) or keydown(KEY_OK):True while not keydown(KEY_EXE) or keydown(KEY_OK): n=(n+keydown(KEY_RIGHT)-keydown(KEY_LEFT)-2)%8+2 draw_string(str(n),155,70,"orange") sleep(0.08) #n=int(input("Taille de la grille (entre 2 et 8) : \n")) #try: #mode=int(input("Mode : \n1 → auto\n2 → manuel\n")) #except: mode=1 if n<5: draw_string("Mode",140,100,"orange") draw_string("Auto Manuel",90,120,"orange") while keydown(KEY_EXE) or keydown(KEY_OK):True while not keydown(KEY_EXE) or keydown(KEY_OK): chgt = keydown(KEY_RIGHT)-keydown(KEY_LEFT) draw_string("[",155-mode*80,120,"white") draw_string("]",235-mode*100,120,"white") draw_string("[",75+mode*80,120,"blue") draw_string("]",135+mode*100,120,"blue") if chgt != 0: mode = (chgt+1)//2 #mode=2 Jeu=[k for k in range(1,n**2+1)] Jeu[-1]=0 Jeu_resolu=Jeu[:] M=0 mouv=[] while Jeu == Jeu_resolu: for l in range(100*n**2): k=randint(1,4) rang=Jeu.index(0) if rang%n<n-1 and k==1: Jeu[rang]=Jeu[rang+1] Jeu[rang+1]=0 M+=1 if mode==0: mouv.append(1) if rang%n>0 and k==2: Jeu[rang]=Jeu[rang-1] Jeu[rang-1]=0 M+=1 if mode==0: mouv.append(2) if rang//n<n-1 and k==3: Jeu[rang]=Jeu[rang+n] Jeu[rang+n]=0 M+=1 if mode==0: mouv.append(3) if rang//n>0 and k==4: Jeu[rang]=Jeu[rang-n] Jeu[rang-n]=0 M+=1 if mode==0: mouv.append(4) fill_rect(50,50,220,150,"white") temps=monotonic() chgt=1 N=-1 while Jeu != Jeu_resolu: rang=Jeu.index(0) if (keydown(KEY_LEFT) and rang%n<n-1) or (mode==0 and mouv[-1]==2): Jeu[rang]=Jeu[rang+1] Jeu[rang+1]=0 chgt=1 elif (keydown(KEY_RIGHT) and rang%n>0) or (mode==0 and mouv[-1]==1): Jeu[rang]=Jeu[rang-1] Jeu[rang-1]=0 chgt=1 elif (keydown(KEY_UP) and rang//n<n-1) or (mode==0 and mouv[-1]==4): Jeu[rang]=Jeu[rang+n] Jeu[rang+n]=0 chgt=1 elif (keydown(KEY_DOWN) and rang//n>0) or (mode==0 and mouv[-1]==3): Jeu[rang]=Jeu[rang-n] Jeu[rang-n]=0 chgt=1 for k in range(n+1): fill_rect(160-(27*n)//2+27*k,96-(20*n)//2,1,20*n,"orange") fill_rect(160-(27*n)//2,96-(20*n)//2+20*k,27*n,1,"orange") if chgt==1: N+=1 while keydown(KEY_UP) or keydown(KEY_DOWN) or keydown(KEY_LEFT) or keydown(KEY_RIGHT):True for i in range(n): for j in range(n): draw_string(" ",164-(27*n)//2+27*j,98-(20*n)//2+20*i) draw_string(str(Jeu[n*i+j])*(Jeu[n*i+j]>0),164-(27*n)//2+27*j+5*(Jeu[n*i+j]<10),98-(20*n)//2+20*i,"blue") chgt=0 mouv=mouv[:-1] T = monotonic()-temps draw_string("Gagné en "+str(N)+" coup"+"s"*(N>1)+" en "+[str(int(T)),str(T)[:7-len(str(N))]][len(str(N))+len(str(int(T)))<6]+" sec",10,200) draw_string("Mélangé en "+str(M)+" coups",60,180) sleep(0.3) while not keydown(KEY_EXE):True