.

ANIMATION

.

A.Objectif

.

Vidéo

Objectif:

Utilisation de tkinter pour animer des objets dans un canevas.La vidéo vous indique l’objectif du programme:

html5 video fullscreen by EasyHtml5Video.com v3.9.1

.

B.Affichage du code:

ovale rotation.py

fenetre.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

32

33

34

from tkinter import *

from math import *

from random import*

from fenetre import*

def cherche_270(l_coul,l_angle):

""""cherche si les deux couleurs sont identiques """

.

def ajouter(fenetre,can,lab2,l_coul):

     """change le score"""

.

def construction(fenetre,can,l_item,l_angle,l_coul):

     """construit la figure"""

.

.

def animer(fenetre,can,bout,l_item,l_angle,l_coul,nb):

     """fait tourner la figure"""

.

def jouer(fenetre,can,bout,l_coul,l_w):

     """lance le jeu"""

.

def menu(fenetre,can,regle):

     """affiche le menu"""

.

regle="lorsque la\ncouleur du bas\nest\nidentique\nà la couleur\ndu bouton\n\

il faut appuyer\npour\naugmenter\nle score"

.

#---------------------------------programme principal-------------------------------#

fenetre=Tk()

fenetre=creer_fenetre(fenetre,"440x750","Animation","icone.ico")

can=Canvas(fenetre,width=440,height=600)

can.grid(row=0,column=0,rowspan=6,columnspan=3 ,sticky='nesw',padx=5)

menu(fenetre,can,regle)menu(fenetre,can,

fenetre.mainloop

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#fenetre.py

#module de construction de fenetres

from tkinter import *

def creer_fenetre(fenetre,taille,titre,icone):

     """modifie une fenêtre"""

     fenetre.title(titre)

     #fenetre.iconbitmap(icone)

     fenetre.geometry(taille)

     fenetre.resizable(height=False,width=False)

     return fenetre

.

.

def nettoie_fenetre(fenetre,can,liste_widgets):

     can.delete(ALL)

     for w in liste_widgets:w.destroy()

     return fenetre,can

.

C.Description des fonctions de base

  • Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.

Construction : Fabrique les polygones qui vont faire des rotations;

Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.

1

2

3

4

5

6

7

8

9

10

11

12

def construction(fenetre,can,l_item,l_angle,l_coul):

     """construit la figure"""

     lc=[15,10,400,590]

     lcf=[120,120,300,480]

     for i in range(8):

          arc1=can.create_arc(lc,start=i*45+22.5,extent=45,fill=l_coul[i],outline=l_coul[i])

          l_item.append(arc1)

          angle=(i*45+22.5)%360

          l_angle.append(angle)

     cercle=can.create_oval(lcf,fill='white')

     l_item.append(cercle)

     return l_angle,l_item

1

2

3

4

5

6

7

8

9

10

11

12

def menu(fenetre,can,regle):

     """affiche le menu"""

     l_coul=["blue","yellow","red","green","blue","yellow","red","green","orange"]

     l_item,l_angle,l_w=[],[],[]

     l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)

     lab=Label(fenetre,text=regle,bg='white',width=12,justify='center',font='verdana 10 bold')

     l_w.append(lab)

     lab.grid(row=2,column=1)

     bout=Button(fenetre,text='JOUER',font='verdana 24 bold',height=2,bg="yellow")

     bout.grid(row=6,column=1,sticky='nesw',padx=5)

     l_w.append(bout)

     bout.config(command=lambda:jouer(fenetre,can,bout,l_coul,l_w))

.

Animer : Execute la rotation.

Jouer : Fait débuter la rotation.

1

2

3

4

5

6

7

8

9

10

11

12

12

14

15

16

17

18

19

def jouer(fenetre,can,bout,l_coul,l_w):def jouer(fenetre,can,bout,l_coul,l_w):

     global color,l_angle,score global color,l_angle,score

     l_item,l_angle=[],[] l_item,l_angle=[],[]

     nb,score,color=0,0,"yellow" nb,score,color=0,0,"yellow"

     fenetre,can=nettoie_fenetre(fenetre,can,l_w) fenetre,can=nettoie_fenetre(fenetre,can,l_w)

     l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)

     lab=Label(fenetre,text='score',bg='white',font='verdana 24 bold')

     l_w.append(lab) l_w.append(lab)

     lab.grid(row=2,column=1) lab.grid(row=2,column=1)

     lab2=Label(fenetre,text='0',font='verdana 24 bold')

     lab2.grid(row=3,column=1)

     l_w.append(lab2) l_w.append(lab2)

     bout=Button(fenetre,text='',command=lambda:ajouter(fenetre,can,lab2,l_coul))

     bout.config(text='Appuyer',font='vedana 20 bold') bout.config(text='Appuyer',font='vedana 20 bold')>

     bout.config(height=2)

     bout.grid(row=6,column=1,sticky='nesw',padx=5)

     l_w.append(bout) l_w.append(bout)

     animer(fenetre,can,bout,l_item,l_angle,l_coul,nb)

1

2

3

4

5

6

7

8

9

10

11

12

12

14

def animer(fenetre,can,bout,l_item,l_angle,l_coul,nb):

     """fait tourner la figure"""

     global color,score

     nb=nb+1

     j=2 j=

     for i in range(8):

           l_angle[i]=(

            can.itemconfigure(l_item[i],start=l_angle[i])

           if nb%8==0:

                 j=randrange(8)

                color=l_coul[j] color=l_coul[j]

      nb=0

     bout.config(bg=color,fg=l_coul[(j+2)%8])

     fenetre,can,bout,l_item,l_angle,l_coul,nb))

.

.

C.Le score et les angles

Note

Ces deux fonctions sont les plus difficiles à construire, à vous de déterminer leur objectif et leur efficacité;

.

1

2

3

4

5

6

7

8

9

def cherche_270(l_coul,l_angle):

     """"cherche si les deux couleurs sont identiques """

     global color

     trouve=False

     angle=45

     for i in range(8):

          if l_angle[i]+angle/2>270-40 and l_angle[i]+angle/2<270+40:

          if color==l_coul[i]:trouve=True

     return trouve

1

2

3

4

5

6

7

8

9

def ajouter(fenetre,can,lab2,l_coul):

     """change le score"""

     global l_angle,color,score

     plus=cherche_270(l_coul,l_angle)

     if plus ==True:

          score=score+1

     else :

          score=score

     lab2.config(text=str(score))