.

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

from tkinter import *

from math import *

import time, threading

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

      

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

fenetre=Tk()

fenetre=creer_fenetre(fenetre,"440x750","Animation")

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)

fenetre.mainloop()

fenetre.py

#fenetre.py

#module de construction de fenetres

from tkinter import *

 

def creer_fenetre(fenetre,taille,titre):

       """modifie une fenêtre"""

       fenetre.title(titre)

       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          

 

def geoliste(g):

       r=[i for i in range(0,len(g)) if not g[i].isdigit()]

       return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])]

.

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;

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

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

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.

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

       """fait tourner la figure"""

       global color,score

       nb=nb+1

       j=2

       for i in range(8):

             l_angle[i]=(l_angle[i]+2)%360

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

       if nb%8==0:

             j=randrange(8)

             color=l_coul[j]

             nb=0

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

       fenetre.after(50,lambda:animer(fenetre,can,bout,l_item,l_angle,l_coul,nb))

Jouer : Fait débuter la rotation.

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

       """lance le jeu"""

       global color,l_angle,score

       l_item,l_angle=[],[]

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

       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)

       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)

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

       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)

       animer(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é;

.

chercher

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

ajouter

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