From f10e493353e350dfb073f2f8ac9c56a142e44037 Mon Sep 17 00:00:00 2001 From: Megamichi Date: Fri, 19 Jan 2024 21:59:16 +0100 Subject: [PATCH] klassifizierung und neue features --- README.md | 17 ++++++++ first.py | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 127 +++++++++++++++++++++++++++++++----------------------- 3 files changed, 204 insertions(+), 53 deletions(-) create mode 100644 README.md create mode 100644 first.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..043e7a3 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# DVD Screensaver +--- +Ne kleine Nachprogrammierung des bekannten Bildschirmschoners + +## Module: +- Pygame + +## Tasten + +- [PLUS] Neue DVD +- [MINUS] Lösche DVD +- [UP] Schneller +- [DOWN] Langsammer +- [LEFT] DVDs Kleiner +- [RIGHT] DVDs Größer +- [F] Vollbild +- [D] Debug Infos \ No newline at end of file diff --git a/first.py b/first.py new file mode 100644 index 0000000..46f3430 --- /dev/null +++ b/first.py @@ -0,0 +1,113 @@ +import pygame +from random import randint as ri +def scale(vaktor): + scaledx = dvdsize[0]*vaktor + scaledy = dvdsize[1]*vaktor + return (scaledx,scaledy) +pygame.init() +default_font = pygame.font.SysFont("sans", 14) + +is_fullscreen = False +fill_screen = True +show_debug = False +screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN) +pygame.display.set_caption("Screensaver") +screensize = pygame.display.get_window_size() + +clock = pygame.time.Clock() + +dvd = pygame.image.load("dvd-logo.png") +dvdsize = dvd.get_size() + +dvdscale = 1 +dvdscalesize = scale(dvdscale) +dvdscaled = pygame.transform.scale(dvd,dvdscalesize) +dvdpos = ri(0,screensize[0]-dvdsize[0]),ri(0,screensize[1]-dvdsize[1]) +dvdspeed = 3 + +richtung = ["r","u"] +def randcolor(): + return (ri(0,255),ri(0,255),ri(0,255)) + +def moving(richtung,dvdpos): + dvdx,dvdy = dvdpos + if richtung[0] == "r": + dvdx += dvdspeed + else: + dvdx -= dvdspeed + if richtung[1] =="u": + dvdy += dvdspeed + else: + dvdy -= dvdspeed + return dvdx,dvdy + +def toggle_fullscreen(is_fullscreen): + if is_fullscreen: + pygame.display.set_mode((600,500),pygame.RESIZABLE) + else: + pygame.display.set_mode((0,0),pygame.FULLSCREEN) + is_fullscreen = not is_fullscreen + return is_fullscreen,pygame.display.get_window_size() + +def get_debug_text(): + debug_text = "" + for index,a in enumerate(globals()): + debug_text = default_font.render(f"{str(a)} = {globals()[a]}", True, (240, 240, 240)) + screen.blit(debug_text,(0,index*default_font.get_height())) + +running = True +if __name__ == "__main__": + color = randcolor() + while running: + if fill_screen: + screen.fill((0,0,0)) + pressed_keys = pygame.key.get_pressed() + + if pressed_keys[pygame.K_ESCAPE]: + exit() + if pressed_keys[pygame.K_SPACE] and not preview_pressed_keys[pygame.K_SPACE]: + fill_screen = not fill_screen + if pressed_keys[pygame.K_d] and not preview_pressed_keys[pygame.K_d]: + show_debug = not show_debug + if pressed_keys[pygame.K_f] and screen.get_size(): + is_fullscreen,screensize = toggle_fullscreen(is_fullscreen) + if pressed_keys[pygame.K_UP] and dvdspeed>=0: + dvdspeed += 1 + if pressed_keys[pygame.K_DOWN] and dvdspeed>=1: + dvdspeed -= 1 + if pressed_keys[pygame.K_RIGHT] and dvdscale>0.1: + dvdscale += 0.1 + dvdscalesize = scale(dvdscale) + if pressed_keys[pygame.K_LEFT] and dvdscale>=0.2: + dvdscale -= 0.1 + dvdscalesize = scale(dvdscale) + + preview_pressed_keys = pressed_keys + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + exit() + if event.type == pygame.WINDOWRESIZED: + screensize = pygame.display.get_window_size() + + if dvdpos[0]+dvdscalesize[0] >= screensize[0]: + richtung[0] = "l" + color = randcolor() + if dvdpos[0] <= 0: + richtung[0] = "r" + color = randcolor() + if dvdpos[1]+dvdscalesize[1] >= screensize[1]: + richtung[1] = "o" + color = randcolor() + if dvdpos[1] <= 0: + richtung[1] = "u" + color = randcolor() + + dvdpos = moving(richtung,dvdpos) + pygame.draw.rect(screen,color,(dvdpos[0],dvdpos[1],dvdscalesize[0],dvdscalesize[1])) + dvdscaled = pygame.transform.scale(dvd,dvdscalesize) + screen.blit(dvdscaled,dvdpos) + if show_debug: + get_debug_text() + pygame.display.flip() + clock.tick(60) \ No newline at end of file diff --git a/main.py b/main.py index 46f3430..1791e88 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,6 @@ import pygame from random import randint as ri -def scale(vaktor): - scaledx = dvdsize[0]*vaktor - scaledy = dvdsize[1]*vaktor - return (scaledx,scaledy) + pygame.init() default_font = pygame.font.SysFont("sans", 14) @@ -16,30 +13,64 @@ screensize = pygame.display.get_window_size() clock = pygame.time.Clock() -dvd = pygame.image.load("dvd-logo.png") -dvdsize = dvd.get_size() +scales = 1 +speeds = 1 -dvdscale = 1 -dvdscalesize = scale(dvdscale) -dvdscaled = pygame.transform.scale(dvd,dvdscalesize) -dvdpos = ri(0,screensize[0]-dvdsize[0]),ri(0,screensize[1]-dvdsize[1]) -dvdspeed = 3 +class DVD(): + def __init__(self,scale,speed): + self.dvd = pygame.image.load("dvd-logo.png") + self.size = self.dvd.get_size() + self.scale = scale + self.speed = speed + self.get_sdvd() + self.pos = ri(0,screensize[0]-self.size[0]),ri(0,screensize[1]-self.size[1]) + self.richtung = ["r","u"] + self.newcolor() + self.render() + -richtung = ["r","u"] -def randcolor(): - return (ri(0,255),ri(0,255),ri(0,255)) + def moving(self): + if self.pos[0]+self.scalesize[0] >= screensize[0]: + self.richtung[0] = "l" + self.newcolor() + if self.pos[0] <= 0: + self.richtung[0] = "r" + self.newcolor() + if self.pos[1]+self.scalesize[1] >= screensize[1]: + self.richtung[1] = "o" + self.newcolor() + if self.pos[1] <= 0: + self.richtung[1] = "u" + self.newcolor() + dvdx,dvdy = self.pos -def moving(richtung,dvdpos): - dvdx,dvdy = dvdpos - if richtung[0] == "r": - dvdx += dvdspeed - else: - dvdx -= dvdspeed - if richtung[1] =="u": - dvdy += dvdspeed - else: - dvdy -= dvdspeed - return dvdx,dvdy + if self.richtung[0] == "r": + dvdx += self.speed + else: + dvdx -= self.speed + if self.richtung[1] =="u": + dvdy += self.speed + else: + dvdy -= self.speed + self.pos = dvdx,dvdy + return dvdx,dvdy + + def newcolor(self): + self.color = (ri(0,255),ri(0,255),ri(0,255)) + + def get_sdvd(self): + scaledx = self.size[0]*self.scale + scaledy = self.size[1]*self.scale + self.scalesize = (scaledx,scaledy) + self.sdvd = pygame.transform.scale(self.dvd,self.scalesize) + + def render(self): + self.get_sdvd() + pygame.draw.rect(screen,self.color,(self.pos[0],self.pos[1],self.scalesize[0],self.scalesize[1])) + screen.blit(self.sdvd,self.pos) + +dvds = [] +dvds.append(DVD(1,1)) def toggle_fullscreen(is_fullscreen): if is_fullscreen: @@ -57,7 +88,6 @@ def get_debug_text(): running = True if __name__ == "__main__": - color = randcolor() while running: if fill_screen: screen.fill((0,0,0)) @@ -71,16 +101,18 @@ if __name__ == "__main__": show_debug = not show_debug if pressed_keys[pygame.K_f] and screen.get_size(): is_fullscreen,screensize = toggle_fullscreen(is_fullscreen) - if pressed_keys[pygame.K_UP] and dvdspeed>=0: - dvdspeed += 1 - if pressed_keys[pygame.K_DOWN] and dvdspeed>=1: - dvdspeed -= 1 - if pressed_keys[pygame.K_RIGHT] and dvdscale>0.1: - dvdscale += 0.1 - dvdscalesize = scale(dvdscale) - if pressed_keys[pygame.K_LEFT] and dvdscale>=0.2: - dvdscale -= 0.1 - dvdscalesize = scale(dvdscale) + if pressed_keys[pygame.K_UP] and speeds>=0: + speeds += 1 + if pressed_keys[pygame.K_DOWN] and speeds>=1: + speeds -= 1 + if pressed_keys[pygame.K_RIGHT] and scales>0.1: + scales += 0.1 + if pressed_keys[pygame.K_LEFT] and scales>=0.2: + scales -= 0.1 + if pressed_keys[pygame.K_PLUS] and not preview_pressed_keys[pygame.K_PLUS]: + dvds.append(DVD(1,1)) + if pressed_keys[pygame.K_MINUS] and not preview_pressed_keys[pygame.K_MINUS] and not len(dvds) == 0: + dvds.pop(0) preview_pressed_keys = pressed_keys @@ -90,23 +122,12 @@ if __name__ == "__main__": if event.type == pygame.WINDOWRESIZED: screensize = pygame.display.get_window_size() - if dvdpos[0]+dvdscalesize[0] >= screensize[0]: - richtung[0] = "l" - color = randcolor() - if dvdpos[0] <= 0: - richtung[0] = "r" - color = randcolor() - if dvdpos[1]+dvdscalesize[1] >= screensize[1]: - richtung[1] = "o" - color = randcolor() - if dvdpos[1] <= 0: - richtung[1] = "u" - color = randcolor() - - dvdpos = moving(richtung,dvdpos) - pygame.draw.rect(screen,color,(dvdpos[0],dvdpos[1],dvdscalesize[0],dvdscalesize[1])) - dvdscaled = pygame.transform.scale(dvd,dvdscalesize) - screen.blit(dvdscaled,dvdpos) + for a in dvds: + a.speed = speeds + a.scale = scales + a.moving() + a.render() + if show_debug: get_debug_text() pygame.display.flip()