Spot Animation
This commit is contained in:
		
							
								
								
									
										69
									
								
								apps/spot.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										69
									
								
								apps/spot.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| import os | ||||
| import sys | ||||
| import random | ||||
|  | ||||
| import pygame | ||||
|  | ||||
|  | ||||
| class SpotDisplay: | ||||
|     FRAMES = 5 | ||||
|  | ||||
|     PATH = [ | ||||
|         *((8 * 1, 8 * i) for i in range(1, 4)), | ||||
|         *((8 * i, 8 * 3) for i in range(2, 9)), | ||||
|         *((8 * 8, 8 * i) for i in range(2, 0, -1)), | ||||
|         *((8 * i, 8 * 1) for i in range(7, 1, -1)), | ||||
|     ] | ||||
|  | ||||
|     def __init__(self, width: int, height: int, debug: bool = False): | ||||
|         self.width = width | ||||
|         self.height = height | ||||
|         self.debug = debug | ||||
|  | ||||
|         pygame.init() | ||||
|         if not self.debug: | ||||
|             self.screen = pygame.Surface((self.width, self.height), flags=pygame.SRCALPHA, depth=32) | ||||
|         else: | ||||
|             self.screen = pygame.display.set_mode((self.width, self.height)) | ||||
|  | ||||
|         self.clock = pygame.time.Clock() | ||||
|         self.i = 0 | ||||
|         self.stop = None | ||||
|         self.sleep = 0 | ||||
|  | ||||
|     def display(self): | ||||
|         while True: | ||||
|             self.clock.tick(self.FRAMES) | ||||
|  | ||||
|             if self.sleep: | ||||
|                 self.sleep -= 1 | ||||
|                 continue | ||||
|  | ||||
|             self.screen.fill((0, 0, 0, 120)) | ||||
|             pygame.draw.rect(self.screen, (0, 0, 0, 255), pygame.Rect(*self.PATH[self.i], 8, 8)) | ||||
|             self.i = (self.i + 1) % len(self.PATH) | ||||
|  | ||||
|             if self.stop == 0 or self.stop is None: | ||||
|                 if self.stop is not None: | ||||
|                     self.sleep = 7 * self.FRAMES | ||||
|                 self.stop = random.randint(8 * self.FRAMES, 20 * self.FRAMES) | ||||
|             self.stop -= 1 | ||||
|  | ||||
|             if not self.debug: | ||||
|                 os.write(1, pygame.image.tostring(self.screen, "RGBA")) | ||||
|             else: | ||||
|                 pygame.display.flip() | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     try: | ||||
|         Nx = int(sys.argv[1])  # Breite des Displays | ||||
|         Ny = int(sys.argv[2])  # Höhe des Displays | ||||
|         debug = False | ||||
|     except IndexError: | ||||
|         Nx, Ny = 80, 40 | ||||
|         debug = True | ||||
|  | ||||
|     SpotDisplay(Nx, Ny, debug).display() | ||||
| @@ -46,6 +46,7 @@ Apps = [ | ||||
|     AppConfig(guiname="Wolfram", name="wolfram", cmd="./wolfram.py"), | ||||
|     AppConfig(guiname="Digi Clock", name="digiclock", cmd="./digi_clock.py"), | ||||
|     AppConfig(guiname="Text Scroller MQTT", name="textscroll", cmd="./textscroll.py"), | ||||
|     AppConfig(guiname="Spot", name="spot", cmd="./spot.py", white=True), | ||||
|     AppConfig(guiname="Flicker", name="flicker", cmd="./flicker"), | ||||
|  | ||||
|     AppConfig(guiname="Pixelflut", name="pixelflut", cmd="./pixelflut", persistent=True), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 T
					T