Jeu d'animation

A.Objectif
_images/titrevideo.PNG _images/blanc1.png

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
_images/haut.PNG
B.Affichage du code:

fenetre.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#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  


_images/haut.PNG

ovale rotation.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
31
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)
fenetre.mainloop()
_images/blanc.PNG
C.Description des fonctions de base :
  • 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 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))
_images/blanc.PNG
  • Construction : Fabrique les polygones qui vont faire des rotations;
 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
_images/blanc.PNG
  • Jouer : Fait débuter la rotation.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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)  
_images/blanc.PNG
  • Animer : Execute la rotation.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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
 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))
_images/blanc.PNG
C.Le score et les angles

Note

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

_images/blanc.PNG
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
_images/blanc.PNG
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))