Simulation de l’économiseur d’écran “Starfield” bien connu sous les anciennes versions de Windows.
Modifiez uniquement la ligne qui génère les positions initiales des points (on les met tous très loin entre 50 et 55) :
def point(): return [randrange(-40,40),randrange(-40,40),randrange(50,55)]
Testez avec >>go()
Modifiez alors les lignes :
px = min(320, max(-1,st[i][0] * (1 - z / 10)**2 + 160)) py = min(240, max(-1, 5 * st[i][1] / z + 120))
On peut aussi changer les lignes px =
et py =
du programme ci-dessous pour obtenir de nombreux autres effets, par exemples :
px = min(320, max(-1,st[i][0] * sqrt(z/5) + 160)) py = min(240, max(-1,st[i][1] / z + 120))
px = min(320, max(-1,st[i][0] * (10 - z) / 10 + 160)) py = min(240, max(-1,st[i][1] * cos(z / 2) + 120))
Sans oublier de mettre from math import sqrt, cos
au début du programme.
from random import * from kandinsky import * from time import sleep nb = 120 st = [0]*nb pr = [0]*nb NR = (0,0,0) def point(): return [randrange(320),0,randrange(1,10)] def init(): fill_rect(0,0,320,222,NR) for i in range(nb): st[i] = point() def go(): init() while True: sleep(.05) for i in range(nb): st[i][1] += randrange(1,int(50/st[i][2])) z = st[i][2] px = st[i][0] py = min(240,st[i][1]) if py >= 240: st[i] = point() if pr[i] != 0: set_pixel(pr[i][0],pr[i][1],NR) pr[i] = [int(px),int(py)] c = int((1 - z/10) * 255) set_pixel(pr[i][0],pr[i][1],color(c,c,c))
from random import * from kandinsky import * nb = 120 st = [0]*nb pr = [0]*nb def point(): return [randrange(-160,160),randrange(-120,120),randrange(1,10)] def init(): fill_rect(0,0,320,222, (0,0,0)) for i in range(nb): st[i] = point() def go(): init() while True: for i in range(nb): st[i][2] -= 0.2 if st[i][2] <= 0: st[i] = point() z = st[i][2] px = min(320, max(-1,st[i][0] / z + 160)) py = min(240, max(-1,st[i][1] / z + 120)) if pr[i] != 0: set_pixel(pr[i][0],pr[i][1],(0,0,0)) pr[i] = [int(px),int(py)] c = int((1 - z / 10) * 255) set_pixel(pr[i][0], pr[i][1], color(255-c,c,3*c))