Simulateur de gravitée, qui n’aboutit qu’à des bretzels !
from math import * from kandinsky import * from ion import * from time import * BACK=(0,)*3 def dist(x1,y1,x2,y2): return sqrt((x1-x2)**2+(y1-y2)**2) def gravity(a1,a2): return (a1.w*a2.w)/((a1.x-a2.x)**2+(a1.y-a2.y)**2) class Pv(): def __init__(self,x,y): self.x=x self.y=y pv=Pv(0,0) class Astro(): def __init__(self,w,x,y,vx=0,vy=0,c=(255,0,0)): global astres astres+=[self,] self.w=w self.x=x self.y=y self.vx=vx self.vy=vy self.c=c self.c2=(c[0]//2,c[1]//2,c[2]//2) self.width=3 def draw(self): fill_rect(int(self.x-pv.x)-self.width+160,int(self.y-pv.y)-self.width+111,self.width*2+1,self.width*2+1,self.c) def undraw(self): fill_rect(int(self.x-pv.x)-self.width+160,int(self.y-pv.y)-self.width+111,self.width*2+1,self.width*2+1,self.c2) astres=[] fill_rect(0,0,320,222,BACK) #Astro(1,0,0,5) Astro(10,0,30,0,0,(0,0,255)) Astro(-1,0,60,-5,0,(0,255,0)) pv=astres[0] while not keydown(KEY_EXE): for i in astres: i.undraw() for ii in astres: if ii==i: continue i.vx+=(ii.x-i.x)*gravity(i,ii)/i.w i.vy+=(ii.y-i.y)*gravity(i,ii)/i.w for i in astres: i.x+=i.vx i.y+=i.vy for i in astres: i.draw() # sleep(0.05)