2048
- Vidéo
- Objectif du tutoriel
- Le code du progamme principal
- Le code des fonctions tableau et image
- Le code de la fonction addition
- Le code de la fonction affiche mouvement
- Le code de la fonction regroupe
- Le code de la fonction affiche fond et des souris
- Le code desfonctions quitter, jouer et les variables
.
Vidéo
html5 video test by EasyHtml5Video.com v3.9.1
.
Objectif du tutoriel :
OBJECTIF
Construire
- Afficher une fenêtre, avec un titre et une icône.
- Déterminer la dimension de la fenêtre pour qu’elle puisse afficher des textes et des images.
- Inclure dans la fenêtre un canevas (Canvas) pour afficher des images qui peuvent se déplacer à l’aide de la souris.
- Utiliser les listes et les tableaux pour stocker des données.
Télécharger les images de 2048
téléchargement images de 2048
.
.
Le code du programme principal:
Affichage du code
liste des fonctions |
---|
#deux48.py
from tkinter import *
from random import randrange
def creer_fenetre(fenetre,taille,titre,icone,couleur):
pass
def nettoie_fenetre(fenetre,can,liste_widgets):
pass
def creer_item(tim):
pass
def Tableau(ligne,colonne):
pass
def remplir(liste,ligne,colonne):
pass
def melange(liste):
pass
def listetableau(tableau,ligne,colonne):
pass
def liste_image(dossier,nombre):
pass
def taille_photo(photo):
pass
def listetableau0(tableau,ligne,colonne,score):
pass
def listetableau(tableau,ligne,colonne):
#fabrication d'une liste avec un tableau lignes colonnes
#remplissage d'une liste
liste=[]
for ln in range(0,ligne):
for cn in range(0,colonne):
liste.append(tableau[ln][cn])
return liste
def remplir(tableau,liste,ligne,colonne):
pass
def change_nombre(tableau,ligne,colonne):
pass
def change_tableau(tableau,liste,ligne,colonne):
pass
def addition_lc(liste):
pass
def addition(tableau,ligne, colonne,sens ,dimensions,l_items,l_image):
pass
def affiche_mouv(fenetre,can,dimensions,tableau,ligne,colonne,score,l_items,\
pass
def regroupe(liste):
pass
def affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions):
pass
def click_souris(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ls,score):
pass
def click_souris_releve(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ln,cn,ls,score):
pass
def nombre_aleatoire(liste):
pass
def quitter():
fenetre.destroy()
def jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls):
pass
#--------déclaration des variables---------------#
largeur,hauteur=625,625
ligne,colonne=4,4
l_widgets=[]
dimensions=150
score=0
k1,k2,k3,k4=0,0,0,0
temp1,temp2,temp3,temp4=4*[0],4*[0],4*[0],4*[0]
sortie1,sortie2,sortie3,sortie4=4*[0],4*[0],4*[0],4*[0]
photos=11*[0]
memoire=[0,0,0,score,-1]
#lp=hauteur de chaque ligne en pixels
#cp=largeur de chaque colonne en pixels
lp,cp=int(hauteur/ligne),int(largeur/colonne)
#liste qui va contenir les images
l_nombre=ligne*colonne*[0]#liste qui va contenir des nombres
#--------------création de la fenêtre------------#
fenetre = Tk()
couleur="violet"
titre="2048 "
taille=str(largeur)+'x'+str(hauteur+50)
creer_fenetre(fenetre,taille,titre,couleur)
fenetre.resizable(width=False,height=False)
#-création du canvas qui va contenir les données-#
can=Canvas(fenetre,width=largeur,height=hauteur,bg='violet')
#le canvas contient le nombre de lignes et de colonnes#qui sont déclarées dans les variables
can.grid(row=0,column=0,rowspan=ligne,columnspan=colonne)
#affichage du fond d'écran
#------remplissage des listes des données-------#
#il faut remplir la liste d'images dans la fenêtre
#sinon cela ne marche pas
l_items=[]
Lab=Button(fenetre,text='rejouer',bg='blue',fg='white',font='verdana 16 bold',\
command=lambda:jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls))
Lab.grid(row=4,column=3)
ls=Label(fenetre,text='',bg='violet',fg='red',font='verdana 15 bold')
ls.grid(row=4,column=2)
lb=Label(fenetre,text='2048',bg='violet',fg='black',font='verdana 20 bold')
lb.grid(row=4,column=1,)
bd=Button(fenetre,text='Quitter',bg='red',fg='white',font='verdana 16 bold',command=quitter)
bd.grid(row=4,column=0)
l_image=liste_image("images150",23)#contient 11 images dans cet exemple
jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls)
fenetre.mainloop()
|
Le code des fonctions tableau et image
Fonctions |
---|
from tkinter import *
from random import randrange
def creer_fenetre(fenetre,taille,titre,couleur):
fenetre.geometry(taille)
fenetre.title(titre)
fenetre.configure(bg=couleur)
fenetre.resizable(width=False,height=False)
return fenetre
def nettoie_fenetre(fenetre,can,liste_widgets):
can.delete(ALL)
for w in liste_widgets:w.destroy()
return fenetre
def creer_item(tim):
#creation d'un item
#tim+'.png' ="inombre.png" (nombre =1;2;
#ou 9 ou 10 ...
p1=PhotoImage(file=tim+'.png')
return p1
def Tableau(ligne,colonne):
#fabrication d'un tableau lignes colonnes"
tableau=ligne*[0]
for ln in range(ligne):tableau[ln]=colonne*[0]
return tableau
def remplir(liste,ligne,colonne):
tableau=Tableau(ligne,colonne)
for ln in range(0,ligne):
for cn in range(0,colonne):
tableau[ln][cn]=liste[colonne*ln+cn]
return tableau
def melange(liste):
#remplissage aléatoire d'une liste de nombres entiers"
numimage=len(liste)
for i in range(numimage):liste[i]=2
k=0
while k<numimage-1:
remelange=False
numero=randrange(1,numimage+1)
for j in range(0,numimage):
if numero==liste[j] :remelange=True
if remelange==False:
liste[k]=numero
k=k+1
return liste
def listetableau(tableau,ligne,colonne):
#fabrication d'une liste avec un tableau lignes colonnes"
liste=[]
for ln in range(0,ligne):
for cn in range(0,colonne):
liste.append(tableau[ln][cn])
return liste
def liste_image(dossier,nombre):
items=nombre*['']
for i in range(nombre):
tim=dossier+'/i'+str(i)
items[i]=creer_item(tim)
return items
def taille_photo(photo):
largeur=photo.width()
hauteur=photo.height()
return largeur,hauteur
|
Le code de la fonction addition
Addition |
---|
def listetableau0(tableau,ligne,colonne,score):
#fabrication d'une liste avec un tableau lignes colonnes
debut=score//64
if debut>6:debut=6
liste=[]
plein=False
for ln in range(1,ligne):
for cn in range(1,colonne):
if tableau[ln][cn]==0:
liste.append(ln*4+cn)
if len(liste)==0:plein=True
if plein==False:
numimage=len(liste)
numero=randrange(0,numimage)
nombre=randrange(debut+1,debut+4)
numero1=liste[numero]
ln=numero1//4
cn=numero1%4
tableau[ln][cn]=nombre+11
return tableau,plein
def listetableau(tableau,ligne,colonne):
#fabrication d'une liste avec un tableau lignes colonnes
liste=[]
for ln in range(0,ligne):
for cn in range(0,colonne):
liste.append(tableau[ln][cn])
return liste
def remplir(tableau,liste,ligne,colonne):
for ln in range(0,ligne):
for cn in range(0,colonne):
tableau[ln][cn]=liste[colonne*ln+cn]
return tableau
def change_nombre(tableau,ligne,colonne):
temp,plein=listetableau0(tableau,ligne,colonne)
temp,nombre=nombre_aleatoire(temp)
nombre=2*nombre
return temp,plein,nombre
def change_tableau(tableau,liste,ligne,colonne):
k=0
for ln in range(1,ligne-1):
for cn in range(1,colonne-1):
if tableau[ln][cn]==0:
tableau[ln][cn]=liste[k]
k=k+1
return tableau
def addition_lc(liste):
temp=[]
retour=4*[0]
return retour
|
Le code de la fonction affiche mouvement
Mouvement |
---|
def affiche_mouv(fenetre,can,dimensions,tableau,ligne,colonne,score,l_items,l_image,sens,temp1,sortie1,temp2,sortie2,temp3,sortie3,temp4,sortie4):
tabdroit=Tableau(4,4)
if sens=="droite":
for i in range(colonne):
tableau[0][i]=sortie1[i]
tableau[1][i]=sortie2[i]
tableau[2][i]=sortie3[i]
tableau[3][i]=sortie4[i]
if sens=="gauche":
for i in range(4):
tableau[0][3-i]=sortie1[i]
tableau[1][3-i]=sortie2[i]
tableau[2][3-i]=sortie3[i]
tableau[3][3-i]=sortie4[i]
if sens=="haut":
for i in range(4):
tableau[i][0]=sortie1[i]
tableau[i][1]=sortie2[i]
tableau[i][2]=sortie3[i]
tableau[i][3]=sortie4[i]
if sens=="bas":
for i in range(4):
tableau[i][0]=sortie1[3-i]
tableau[i][1]=sortie2[3-i]
tableau[i][2]=sortie3[3-i]
tableau[i][3]=sortie4[3-i]
for w in l_items:can.delete(w)
tableau,l_items=affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions)
|
Le code de la fonction regroupe
regroupe |
---|
def regroupe(liste):
#regroupe les lignes ou les colonnes
k=0
temp=4*[0]
sortie=4*[0]
for i in range(4):
if liste[i]!=0:
temp[k]=liste[i]
k=k+1
if k==1:
sortie[0]=temp[0]
sortie[1]=0
sortie[2]=0
sortie[3]=0
if k==2 :
if temp[0]==temp[1]:
sortie[0]=temp[0]+1
sortie[1]=0
sortie[2]=0
sortie[3]=0
if temp[0]!=temp[1]:
sortie[0]=temp[0]
sortie[1]=temp[1]
sortie[2]=0
sortie[3]=0
if k==3:
if temp[0]==temp[1]:
sortie[0]=temp[0]+1
sortie[1]=temp[2]
temp[2]=0
if temp[0]!= temp[1]:
sortie[0]=temp[0]
if temp[1]==temp[2]:
sortie[1]=temp[1]+1
if temp[1]!=temp[2]:
sortie[1]=temp[1]
sortie[2]=temp[2]
if k==4:
if temp[0]==temp[1]:
sortie[0]=temp[0]+1
if temp[2]==temp[3]:
sortie[1]=temp[2]+1
sortie[1]=temp[2]
sortie[2]=temp[3]
if temp[2]!=temp[3]:
sortie[1]=temp[2]
sortie[2]=temp[3]
sortie[3]=0
if temp[0]!=temp[1]:
sortie[0]=temp[0]
if temp[1]==temp[2]:
sortie[1]=temp[1]+1
sortie[2]=temp[3]
sortie[3]=0
if temp[1]!=temp[2]:
sortie[1]=temp[1]
if temp[2]==temp[3]:
sortie[2]=temp[3]+1
sortie[3]=0
if temp[2]!=temp[3]:
sortie[2]=temp[2]
sortie[3]=temp[3]
return temp,k,sortie
|
Le code de la fonction affiche fond et des souris
SCRIPT |
---|
def affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions):
for w in l_items:can.delete(w)
cp=dimensions
for i in range(0,ligne):
for j in range(0,colonne):
k=tableau[i][j]
if tableau[i][j]>11:tableau[i][j]=tableau[i][j]-11
B=can.create_image(j*(cp+5)+cp/2+5,i*(cp+5)+cp/2+5,image=l_image[k])
l_items.append(B)
return l_items,tableau
def click_souris(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ls,score):
x,y=event.x,event.y
ln=int(y)//lp
cn=int(x)//cp
can.bind("<Button1-ButtonRelease>",
lambda event:click_souris_releve(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ln,cn,ls,score))
def click_souris_releve(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ln,cn,ls,score):
global dimensions,l_widgets
x,y=event.x,event.y
lin=int(y)//lp
cin=int(x)//cp
lplus=ln-lin
cplus=cn-cin
sens='rien'
if cplus==0 :
if lplus>1:sens='haut'
if lplus<1:sens='bas'
if lplus==0:sens='rien'
if lplus==0:
if cplus>1:sens='droite'
if cplus<1:sens='gauche'
if cplus==0:sens='rien'
l_items,tableau= addition(tableau,ligne, colonne,sens ,dimensions,l_items,l_image)
l_items,tableau=affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions)
dimensions=150
if sens!='rien': tableau,plein=listetableau0(tableau,ligne,colonne,score)
l_items,tableau=affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions)
score=score+1
ls.config(text=str(score))
k=0
l_widgets=l_items
for i in range(4):
for j in range(4):
if tableau[i][j]==0:k=k+1
if k!=0 and sens!='rien':
can.bind("<Button-1>",lambda event:click_souris(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ls,score))
|
Le code des fonctions quitter, jouer et les variables
SCRIPT |
---|
def nombre_aleatoire(liste):
#remplissage aléatoire d'une liste de nombres entiers
numimage=len(liste)
nombre=randrange(1,4)
numero=randrange(0,numimage)
liste[numero]=nombre
return liste,nombre
def quitter():
fenetre.destroy()
def jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls):
global score,l_widgets
liste=16*[0]
tableau=Tableau(4,4)
tableau=remplir(tableau,liste,ligne,colonne)
score=0
for w in l_widgets:can.delete(w)
can.delete(ALL)
ls.config(text="0")
lp,cp=int(hauteur/ligne),int(largeur/colonne)
l_items,tableau=affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions)
l_nombre=ligne*colonne*[0]
for i in range(3):
tableau,plein=listetableau0(tableau,ligne,colonne,0)
l_items,tableau=affiche_fond(can,l_image,tableau,ligne,colonne,l_items,dimensions)
can.bind("<Button-1>",lambda event:click_souris(event,fenetre,can,l_nombre,l_image,lp,cp,ligne,colonne,l_items,tableau,plein,ls,score))
ligne,colonne=4,4
l_widgets=[]
score=0
k1,k2,k3,k4=0,0,0,0
temp1,temp2,temp3,temp4=4*[0],4*[0],4*[0],4*[0]
sortie1,sortie2,sortie3,sortie4=4*[0],4*[0],4*[0],4*[0]
photos=11*[0]
memoire=[0,0,0,score,-1]
fenetre = Tk()
larg=fenetre.winfo_screenwidth()
long=fenetre.winfo_screenheight()
l_image=liste_image("images150",23)
dimensions ,dim=taille_photo(l_image[0])
if larg>long:
largeur,hauteur=long,long
if larg<long:
largeur,hauteur=larg,larg
lp,cp=int(hauteur/ligne),int(largeur/colonne)
lp,lc=4,4
largeur,hauteur=4*(dim+6),4*(6+dim)
l_nombre=ligne*colonne*[0]
couleur="violet"
titre="2048 "
taille=str(largeur)+'x'+str(hauteur)
creer_fenetre(fenetre,taille,titre,couleur)
can=Canvas(fenetre,width=largeur,height=hauteur,bg='violet')
can.grid(row=0,column=0,rowspan=ligne,columnspan=colonne)
l_items=[]
Lab=Button(fenetre,text='rejouer',bg='blue',fg='white',font='verdana 16 bold',
command=lambda:jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls))
Lab.grid(row=4,column=3)
ls=Label(fenetre,text='',bg='violet',fg='red',font='verdana 15 bold')
ls.grid(row=4,column=2)
lb=Label(fenetre,text='2048',bg='violet',fg='black',font='verdana 20 bold')
lb.grid(row=4,column=1,)
bd=Button(fenetre,text='Quitter',bg='red',fg='white',font='verdana 16 bold',command=quitter)
bd.grid(row=4,column=0)
jouer(fenetre,can,l_image,ligne,colonne,largeur,hauteur,l_items,dimensions,ls)
fenetre.mainloop()
|