Python taquin en mode console

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")
  

Amélioration :

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 ? 

ptijoz, le 12 octobre 2025 à 09:18

préalable 

sudo apt install python3-pynput


cookie
Gérer les cookies

Ce site utilise des cookies nécessaires à son fonctionnement, ils permettent de fluidifier son fonctionnement par exemple en mémorisant les données de connexion, la langue que vous avez choisie ou la validation de ce message.