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

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.