Фонтан2

2014-07-11 16-05-29 Скриншот экрана
from random import randrange as rnd
from tkinter import *
import time

root= Tk()
canv = Canvas(root,width = 400,height = 600, bg = 'white')
canv.pack()

class ball():
    def __init__(self):
        self.x = 200
        self.y = 500
        self.r = 2.4
        self.vx = 6
        self.ay = 0
        self.vy = -1
        self.color = 'orange'
        self.live = 50
        self.id = canv.create_oval(self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r, fill = self.color, width = 0)
        self.div = 0
        
    def set_coords(self):
        canv.coords(self.id, self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r)
        
    def divide(self,n=3):
        global balls
        for z in range(n):
            balls += [ball()]
            balls[-1].div = 1
            balls[-1].x = self.x
            balls[-1].y = self.y
            balls[-1].vx = self.vx+n-z*2
            balls[-1].vy = self.vy+rnd(10)/4
            balls[-1].ay = 0.2
            
        
        self.kill()

    def set_minus_r(self):
        self.r -= 0.04
        if self.r <= 0.5:
            self.kill()
        else:
            canv.coords(self.id, self.x-self.r,self.y-self.r,self.x+self.r,self.y+self.r)
        
    def kill(self):
        global balls
        balls.pop(balls.index(self))
        canv.delete(self.id)        
        
    def move(self):
        if self.vy > 0 and self.y > rnd(300,400):
            self.kill()
        else:
            if self.y < 300 and not self.div and not rnd(5):
                self.divide(3)
            else:
                if self.vy > 0:
                    self.set_minus_r()
                    
                self.y += self.vy
                self.vy += self.ay
                self.x += self.vx
                if self.x > (800-self.r):
                    self.vx = -self.vx//2
                    self.x = 800-self.r-1
                self.set_coords()
        

balls = []

k1 = k2 = k = 0 
vy = 0
vx = 0
d = 30
dd = 30
ddd = 2
while 1:
    if k > d:
        vy = rnd(3)
        d = rnd(40,45)
        k = 0
    k += 1
    
    if k1 > dd:
        vx = rnd(-5,5)
        dd = rnd(40,50)
        k1 = 0
    k1 += 1

    if k2 > ddd:
        for zz in range(rnd(-5,0),rnd(6),3):
            balls += [ball()]
            balls[-1].vx = (zz+vx)/8
            balls[-1].vy = -8+vy+rnd(20)/12
        k2 = 0
    k2 += 1
        
    
    

    for b in balls:
        b.move()
        
    #time.sleep(0.1)
    canv.update()   


root.mainloop()

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *