-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanimation.py
91 lines (73 loc) · 2.37 KB
/
animation.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""
Projet 2 : Ricosheep
Amal ABDALLAH
Nicolas SEBAN
Adam SOUIOU
"""
import fltk
import random
import cfg
from dataclasses import dataclass
from PIL import Image, ImageTk
from os import path
from typing import List
@dataclass
class FallingSheep:
x: float
y: float
Sheep: object
angle: int
speed: float
height: float
def initialisation(number: int) -> List[FallingSheep]:
"""
Initialise les images et les objets FallingSheep contenant
les moutons pour l'animation du menu d'accueil selon le
nombre ``number``, et renvoie une liste contenant tous les
objets FallingSheep.
"""
liste = []
img1 = Image.open(path.join('media', 'images', 'chute1.png'))
img2 = Image.open(path.join('media', 'images', 'chute2.png'))
for _ in range(number+1):
proportion = random.randint(1, 7)
imagechute = (img1.copy()
if bool(random.getrandbits(1)) else
img2.copy())
imagechute = resize(imagechute, 24, proportion)
liste.append(
FallingSheep(
x=random.randint(0, cfg.largeur_fenetre),
y=random.randint(int(-cfg.hauteur_fenetre*2), 0),
Sheep=imagechute,
speed=proportion,
angle=random.randint(-60, 60),
height=imagechute.height
)
)
imagechute = imagechute.rotate(
liste[-1].angle, expand=True, resample=Image.BICUBIC)
liste[-1].height = imagechute.height
liste[-1].Sheep = ImageTk.PhotoImage(imagechute)
liste.sort(key=lambda elem: elem.speed)
return liste
def resize(image: Image, taille: int, proportion: int = 1):
"""
Redimensionne l'image donné selon la taille et la proportion
"""
(width, height) = (image.width // taille * proportion,
image.height // taille * proportion)
return image.resize((width, height), resample=Image.NEAREST)
def chute(elem: FallingSheep):
"""
Fait "tombé" l'élément selon sa vitesse, sa taille et la taille de l'écran
"""
elem.y += elem.speed
elem.y = elem.y % (cfg.hauteur_fenetre + elem.height)
def dessiner(liste: List[FallingSheep]):
"""
Dessine tous les éléments de la liste de FallingSheep
"""
for elem in liste:
fltk.afficher_image(elem.x, elem.y, elem.Sheep, ancrage='s')
chute(elem)