Quelques explications :
- la variable
boulescontient toutes les boules lumineuses du sapin - chaque boule a sa propre vie, à savoir une position
x,y, une taillet, une couleurcet un anglea - Toutes les 0,01 seconde on met à jour l’ensemble des boules
- la position
x,ysuit une ellipse, l’angle augmentant de façon aléatoire (dit autrement, les boules ne tournent pas à la même vitesse) et lorsqu’un tour complet est effectué (2*pi), la couleur change (en suivant les valeurs qu’il y a dans la variablecouleurs) - A chaque fois on dessine un rectangle noir pour nettoyer un peu le dessin, on pourrait également mémoriser la position précédente de la boule pour l’effacer plus proprement.
from math import cos,sin,pi from kandinsky import fill_rect from time import monotonic from random import randint, random BL = (255,) *3 NR = (0,) *3 couleurs = [(22,90,50),(250,250,40),(22,90,50),(230,70,50),(22,90,50),(100,250,10),NR,NR,NR] class boule: def __init__(self, h, r , a): self.h = 40 + h self.r = r self.a = a self.t = 0 self.c = 0 def suivant(self): if random() < .8: x = int(160 + self.r * cos(self.a)) y = int(self.h + 10 * sin(self.a)) fill_rect(x, y, self.t + 1, 1 + self.t, NR) self.t = (1 + self.t) % 4 self.a += pi / randint(5,100) if self.a > 2 * pi: self.a = 0 self.c = (1 + self.c) % 9 fill_rect(x, y, self.t, self.t,couleurs[self.c]) fill_rect(0,0,320,222,NR) boules = [] for h in range(0,140,5): boules.append(boule(h, h / 2.5,0)) nbBoules = len(boules) t = monotonic() while True: if monotonic() - t > .01: t = monotonic() for k in range(nbBoules): boules[k].suivant()