import pygame import sys import random pygame.display.init() # modes = pygame.display.list_modes() # print modes # size_x = modes[0][0] # size_y = modes[0][1] size_x = 640 size_y = 480 window = pygame.display.set_mode((size_x,size_y)) screen = pygame.display.get_surface() def input(events): for event in events: if event.type == pygame.QUIT: sys.exit(0) elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: sys.exit(0) snow = [] filledSnow = [0 for i in range(size_x)] def addSnow(filledSnow,x): left = 9999 if x > 0: left = filledSnow[x-1] mid = filledSnow[x] right = 9999 if x < len(filledSnow)-1: right = filledSnow[x+1] delta = 1 if left < mid + 1: filledSnow[x-1] = filledSnow[x-1] + delta elif right < mid + 1: filledSnow[x+1] = filledSnow[x+1] + delta else: filledSnow[x] = filledSnow[x] + delta class Snow: def __init__(self): self.x = random.randrange(size_x) self.y = - random.randrange(100) self.dx = random.random() - random.random() self.dy = random.randrange(1,30) + random.random() self.size = random.randrange(1,4) c = random.randrange(256) self.color = [c,c,c] #self.color = [random.randrange(256),random.randrange(256),random.randrange(256)] def draw(self,screen): pygame.draw.circle(screen,self.color,(self.x,self.y),self.size) self.x += self.dx self.y += self.dy if self.x < 0 or self.x > size_x: self.x = random.randrange(size_x) self.y = 0 self.dy = random.randrange(1,30) + random.random() if (self.y > size_y - filledSnow[int(self.x)]): addSnow(filledSnow,int(self.x)) self.x = random.randrange(size_x) self.y = 0 self.dy = random.randrange(1,30) + random.random() for i in range(600): snow.append(Snow()) while True: screen.fill([0,0,0]) for s in snow: s.draw(screen) for x,y in enumerate(filledSnow): screen.fill([255,255,255],[x,size_y - y,1,y]) input(pygame.event.get()) pygame.display.flip()