Added missing lines.py
This commit is contained in:
parent
12704d5732
commit
6472a15dd6
81
apps/lines.py
Executable file
81
apps/lines.py
Executable file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import random
|
||||
import time
|
||||
import random
|
||||
import colorsys
|
||||
|
||||
Nx = int(sys.argv[1])
|
||||
Ny = int(sys.argv[2])
|
||||
|
||||
PixelsPerFrame = 20
|
||||
NumLines = 7
|
||||
LineGenerationRate = 0.2
|
||||
time_ms = 10
|
||||
try:
|
||||
time_ms = int(sys.argv[3])
|
||||
except:
|
||||
pass
|
||||
buffer = bytearray(b"\x00" * (3 * Nx * Ny))
|
||||
|
||||
def SetPixel(x, y, r, g, b):
|
||||
idx = x+Nx*y
|
||||
buffer[3*idx+0] = r
|
||||
buffer[3*idx+1] = g
|
||||
buffer[3*idx+2] = b
|
||||
|
||||
|
||||
class Line:
|
||||
def __init__(self):
|
||||
self.color = random.random()*0.3+0.7
|
||||
self.dir = random.randint(0, 3)
|
||||
if self.dir == 0:
|
||||
self.posx = 0
|
||||
self.posy = random.randint(0, Ny-1)
|
||||
if self.dir == 1:
|
||||
self.posx = Nx-1
|
||||
self.posy = random.randint(0, Ny-1)
|
||||
if self.dir == 2:
|
||||
self.posx = random.randint(0, Nx-1)
|
||||
self.posy = 0
|
||||
if self.dir == 3:
|
||||
self.posx = random.randint(0, Nx-1)
|
||||
self.posy = Ny-1
|
||||
|
||||
def step(self):
|
||||
self.color *= 0.995
|
||||
pixel = int(self.color*255)
|
||||
SetPixel(self.posx, self.posy, pixel, pixel, pixel)
|
||||
if self.dir == 0:
|
||||
self.posx += 1
|
||||
if self.dir == 1:
|
||||
self.posx -= 1
|
||||
if self.dir == 2:
|
||||
self.posy += 1
|
||||
if self.dir == 3:
|
||||
self.posy -= 1
|
||||
|
||||
def alive(self):
|
||||
return self.posx >= 0 and self.posx < Nx and self.posy >= 0 and self.posy < Ny
|
||||
|
||||
lines = []
|
||||
while True:
|
||||
for i in range(PixelsPerFrame):
|
||||
x = random.randint(0, Nx-1)
|
||||
y = random.randint(0, Ny-1)
|
||||
r, g, b = colorsys.hsv_to_rgb(random.random(), 0.7, 0.5)
|
||||
r = int(r*255)
|
||||
g = int(g*255)
|
||||
b = int(b*255)
|
||||
SetPixel(x, y, r, g, b)
|
||||
for line in lines:
|
||||
line.step()
|
||||
if not line.alive():
|
||||
lines.remove(line)
|
||||
if len(lines) < NumLines and random.random() < LineGenerationRate:
|
||||
lines.append(Line())
|
||||
os.write(1, buffer)
|
||||
time.sleep(time_ms*0.001)
|
||||
|
Loading…
Reference in New Issue
Block a user