Voici un jeu de taquin en mode console
une grille est mélangée
et il faut deplacer les cases avec les flèches pour les remettre dans l'ordre

voici le code de taquin.py
#Taquin console version 1.0 du 28/08/2025
from random import randint,seed
from time import sleep
from pynput import keyboard
from sys import exit
key=0
m=[1] # grille de départ modifiable
n=[] #grille de départ figee
r=[2,3,3,2,3,4,4,3,3,4,4,3,2,3,3,2] # nombre de deplacements possibles
c=0 # nombre de coups
def getkey():
global key
with keyboard.Events() as events:
for event in events:
if event.key == keyboard.Key.left:
key=4
break
if event.key == keyboard.Key.down:
key=2
break
if event.key == keyboard.Key.up:
key=8
break
if event.key == keyboard.Key.right:
key=6
break
if event.key == keyboard.Key.esc:
key=5
break
return key
def cls():
print("\033c", end="")
print("taquin 1.0 console")
print()
def permute(c1,c2):
m[c1],m[c2]=m[c2],m[c1]
def swap(np,c1,c2,c3=-1,c4=-1):
x=randint(1,r[np])
#print(x)
if x==1:permute(np,c1)
if x==2:permute(np,c2)
if x==3:permute(np,c3)
if x==4:permute(np,c4)
def melange():
p=m.index(0)
if p==0:swap(p,1,4)
if p==1:swap(p,2,0,5)
if p==2:swap(p,1,3,6)
if p==3:swap(p,2,7)
if p==4:swap(p,5,8,0)
if p==5:swap(p,6,4,9,1)
if p==6:swap(p,7,5,10,2)
if p==7:swap(p,6,11,3)
if p==8:swap(p,9,12,4)
if p==9:swap(p,10,8,13,5)
if p==10:swap(p,11,9,14,6)
if p==11:swap(p,10,15,7)
if p==12:swap(p,13,8)
if p==13:swap(p,14,12,9)
if p==14:swap(p,15,13,10)
if p==15:swap(p,14,11)
def init():
global n
for i in range(2,16):
m.append(i)
m.append(0)
n=m.copy() # copy de la grille de départ
for i in range(1000): # nombre de mouvements pour melanger
melange()
def affiche():
cls()
a=0
print("+----"*4+"+")
for i in range(4):
for j in range(4):
s="|"
if m[a]<10:s=s+" "
if m[a]==0:
case=" "
else:
case=str(m[a])
print(s,case,end=" ")
a+=1
print("|")
print("+----"*4+"+")
# -- debut programme principal
init()
cls()
affiche()
while m!=n:
getkey()
sleep(0.25) # tempo pour rebond touche
print(key)
p=m.index(0)
affiche()
if key==8 and p<12:
permute(p,p+4)
c+=1
affiche()
if key==2 and p>3:
permute(p,p-4)
c+=1
affiche()
if key==6 and p!=0 and p!=4 and p!=8 and p!=12:
permute(p,p-1)
c+=1
affiche()
if key==4 and p!=3 and p!=7 and p!=11 and p!=15:
permute(p,p+1)
c+=1
affiche()
if key==5:
print("abandon")
exit()
print("Bravo en",c,"coups.\n")
On peut modifier une partie du code pour avoir quelque chose de plus joli.
ici on remplace la focntion affiche() par celle-ci :
def affiche():
cls()
a=0
print("╔════╦════╦════╦════╗")
for i in range(4):
for j in range(4):
s="║"
if m[a]<10:s=s+" "
if m[a]==0:
case=" "
else:
case=str(m[a])
print(s,case,end=" ")
a+=1
print("║")
if i<3:print("╠════╬════╬════╬════╣")
print("╚════╩════╩════╩════╝")
ce qui donnerait :

un peu plus beau n'est-ce pas ?