sapin.py

Created by schraf

Created on December 05, 2021

1.06 KB

Quelques explications :

  • la variable boules contient toutes les boules lumineuses du sapin
  • chaque boule a sa propre vie, à savoir une position x,y, une taille t, une couleur c et un angle a
  • Toutes les 0,01 seconde on met à jour l’ensemble des boules
  • la position x,y suit 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 variable couleurs)
  • 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()