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)