tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
101
Task/Brownian-tree/Python/brownian-tree.py
Normal file
101
Task/Brownian-tree/Python/brownian-tree.py
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import pygame, sys, os
|
||||
from pygame.locals import *
|
||||
from random import randint
|
||||
pygame.init()
|
||||
|
||||
MAXSPEED = 15
|
||||
SIZE = 3
|
||||
COLOR = (45, 90, 45)
|
||||
WINDOWSIZE = 400
|
||||
TIMETICK = 1
|
||||
MAXPART = 50
|
||||
|
||||
freeParticles = pygame.sprite.Group()
|
||||
tree = pygame.sprite.Group()
|
||||
|
||||
window = pygame.display.set_mode((WINDOWSIZE, WINDOWSIZE))
|
||||
pygame.display.set_caption("Brownian Tree")
|
||||
|
||||
screen = pygame.display.get_surface()
|
||||
|
||||
|
||||
class Particle(pygame.sprite.Sprite):
|
||||
def __init__(self, vector, location, surface):
|
||||
pygame.sprite.Sprite.__init__(self)
|
||||
self.vector = vector
|
||||
self.surface = surface
|
||||
self.accelerate(vector)
|
||||
self.add(freeParticles)
|
||||
self.rect = pygame.Rect(location[0], location[1], SIZE, SIZE)
|
||||
self.surface.fill(COLOR, self.rect)
|
||||
|
||||
def onEdge(self):
|
||||
if self.rect.left <= 0:
|
||||
self.vector = (abs(self.vector[0]), self.vector[1])
|
||||
elif self.rect.top <= 0:
|
||||
self.vector = (self.vector[0], abs(self.vector[1]))
|
||||
elif self.rect.right >= WINDOWSIZE:
|
||||
self.vector = (-abs(self.vector[0]), self.vector[1])
|
||||
elif self.rect.bottom >= WINDOWSIZE:
|
||||
self.vector = (self.vector[0], -abs(self.vector[1]))
|
||||
|
||||
def update(self):
|
||||
if freeParticles in self.groups():
|
||||
self.surface.fill((0,0,0), self.rect)
|
||||
self.remove(freeParticles)
|
||||
if pygame.sprite.spritecollideany(self, freeParticles):
|
||||
self.accelerate((randint(-MAXSPEED, MAXSPEED),
|
||||
randint(-MAXSPEED, MAXSPEED)))
|
||||
self.add(freeParticles)
|
||||
elif pygame.sprite.spritecollideany(self, tree):
|
||||
self.stop()
|
||||
else:
|
||||
self.add(freeParticles)
|
||||
|
||||
self.onEdge()
|
||||
|
||||
if (self.vector == (0,0)) and tree not in self.groups():
|
||||
self.accelerate((randint(-MAXSPEED, MAXSPEED),
|
||||
randint(-MAXSPEED, MAXSPEED)))
|
||||
self.rect.move_ip(self.vector[0], self.vector[1])
|
||||
self.surface.fill(COLOR, self.rect)
|
||||
|
||||
def stop(self):
|
||||
self.vector = (0,0)
|
||||
self.remove(freeParticles)
|
||||
self.add(tree)
|
||||
|
||||
def accelerate(self, vector):
|
||||
self.vector = vector
|
||||
|
||||
NEW = USEREVENT + 1
|
||||
TICK = USEREVENT + 2
|
||||
|
||||
pygame.time.set_timer(NEW, 50)
|
||||
pygame.time.set_timer(TICK, TIMETICK)
|
||||
|
||||
|
||||
def input(events):
|
||||
for event in events:
|
||||
if event.type == QUIT:
|
||||
sys.exit(0)
|
||||
elif event.type == NEW and (len(freeParticles) < MAXPART):
|
||||
Particle((randint(-MAXSPEED,MAXSPEED),
|
||||
randint(-MAXSPEED,MAXSPEED)),
|
||||
(randint(0, WINDOWSIZE), randint(0, WINDOWSIZE)),
|
||||
screen)
|
||||
elif event.type == TICK:
|
||||
freeParticles.update()
|
||||
|
||||
|
||||
half = WINDOWSIZE/2
|
||||
tenth = WINDOWSIZE/10
|
||||
|
||||
root = Particle((0,0),
|
||||
(randint(half-tenth, half+tenth),
|
||||
randint(half-tenth, half+tenth)), screen)
|
||||
root.stop()
|
||||
|
||||
while True:
|
||||
input(pygame.event.get())
|
||||
pygame.display.flip()
|
||||
Loading…
Add table
Add a link
Reference in a new issue