Jeu d'animation

A.Objectif
_images/titrevideo.PNG

Objectif:

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

html5 video format by EasyHtml5Video.com v4.0
_images/haut.PNG
B.Affichage du code:

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

liste des fonctions

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,listep,nombre):

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

      """fait tourner la figure"""

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

      """lance le jeu"""

def menu(fenetre,can,regle):

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

il faut appuyer\npour\naugmenter\nle score"

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

fenetre=Tk()

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

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

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

menu(fenetre,can,regle)

fenetre.mainloop() 

code du programme

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

      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

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

 

def construction(fenetre,can,l_item,listep,nombre):

      lc=[10,10,590,590]

      lcf=[120,120,480,480]

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

      angle=int(360/nombre)

      for i in range(nombre):

      arc1=can.create_arc(lc,start=i*angle+270+angle/2,extent=angle,fill=lcoul[i],outline=lcoul[i],width=3)

            l_item.append(arc1)

            anglete=(i*angle+270+angle/2)%360

            listep.append(anglete)

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

      l_item.append(cercle)

      arc1=can.create_arc(lcf,start=270-40,extent=80,fill="",outline="black",width=3,tag="UN")

      l_item.append(arc1)

      return listep,l_item   

      

               

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

      """fait tourner la figure"""

      global color,score

      nb=nb+1

      j=2

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

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

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

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

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

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

     

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

il faut appuyer\npour\naugmenter\nle score"

   

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

fenetre=Tk()

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

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

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

menu(fenetre,can,regle)

fenetre.mainloop()