Added missing lines.py
This commit is contained in:
		
							
								
								
									
										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) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Andreas Völker
					Andreas Völker