import math
import random
import pygame
if '.' in str(1.0): # python
import pygame.locals
SCR_WIDTH = 800
SCR_HEIGHT = 600
class VineStruct(object):
a = 0
x1 = 0
y1 = 0
x2 = 0
y2 = 0
i = 0
length = 0
iterations = 0
constant = 0
ang = 0
centerx = 0
centery = 0
class Vines(object):
def __init__(self):
if '.' in str(1.0): # python
self.fp = VineStruct()
else: # tinypy
self.fp = {
'a' : 0,
'x1' : 0,
'y1' : 0,
'x2' : 0,
'y2' : 0,
'i' : 0,
'length' : 0,
'iterations' : 0,
'constant' : 0,
'ang' : 0,
'centerx' : 0,
'centery' : 0,
}
self.fp.i = 0
self.fp.length = 0
self.fp.iterations = 30 + random.randint(0, 100)
pygame.init()
self.screen = pygame.display.set_mode((SCR_WIDTH, SCR_HEIGHT))
def __drawLine__(self, x1, y1, x2, y2, color):
# validate the bounds
if x1 < 0: x1 = 0
if x1 > SCR_WIDTH: x1 = SCR_WIDTH
if x2 < 0: x2 = 0
if x2 > SCR_WIDTH: x2 = SCR_WIDTH
if y1 < 0: y1 = 0
if y1 > SCR_HEIGHT: y1 = SCR_HEIGHT
if y2 < 0: y2 = 0
if y2 > SCR_HEIGHT: y2 = SCR_HEIGHT
if x1 <= x2:
sx, sy = x1, y1
dx, dy = x2, y2
else:
sx, sy = x2, y2
dx, dy = x1, y1
if (abs(x1 - x2) < 1e-4):
x = sx
if sy > dy:
sy, dy = dy, sy
y = sy
while (y < dy):
self.screen.set_at((x, y), color)
y += 1
else:
k = (dy - sy) / (dx - sx)
x = sx
while (x < dx):
y = sy + k * (x - sx)
self.screen.set_at((x, y), color)
x += 1
pygame.display.flip()
def draw(self):
red = random.randint(0, 255)
green = random.randint(0, 255)
blue = random.randint(0, 255)
if (self.fp.i >= self.fp.length):
self.fp.iterations -= 1
if (self.fp.iterations == 0):
self.__init__(self)
self.fp.centerx = random.randint(0, SCR_WIDTH);
self.fp.centery = random.randint(0, SCR_HEIGHT);
self.fp.ang = 60 + random.randint(0, 720);
self.fp.length = 100 + random.randint(0, 3000);
self.fp.constant= self.fp.length * (10 + random.randint(0, 10))
self.fp.i = 0;
self.fp.a = 0;
self.fp.x1 = 0;
self.fp.y1 = 0;
self.fp.x2 = 1;
self.fp.y2 = 0;
count = self.fp.i + random.randint(10, 100)
if (count > self.fp.length):
count = self.fp.length
while (self.fp.i < count):
x1 = self.fp.centerx + (self.fp.x1 / self.fp.constant)
y1 = self.fp.centery - (self.fp.y1 / self.fp.constant)
x2 = self.fp.centerx + (self.fp.x2 / self.fp.constant)
y2 = self.fp.centery - (self.fp.y2 / self.fp.constant)
color = (red, green, blue)
self.__drawLine__(x1, y1, x2, y2, color)
self.fp.a += (self.fp.ang * self.fp.i)
self.fp.x1 = self.fp.x2
self.fp.y1 = self.fp.y2
self.fp.x2 += int((self.fp.i * (math.cos(self.fp.a) * 360.0)) / (2.0 * math.pi))
self.fp.y2 += int((self.fp.i * (math.sin(self.fp.a) * 360.0)) / (2.0 * math.pi))
self.fp.i += 1
def main():
myVine = Vines()
_quit = False
while not _quit:
for e in pygame.event.get():
if e.type in (pygame.locals.QUIT,pygame.locals.KEYDOWN):
_quit = True
myVine.draw()
if __name__ == '__main__':
main()
print("#OK")
|