import math import pygame # pygame setup pygame.init() screen = pygame.display.set_mode((1280, 720)) clock = pygame.time.Clock() running = True dt = 0 player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2) walls = [ pygame.Rect(980, 100, 50, 440), pygame.Rect(280, 650, 720, 35), ] while running: # poll for events # pygame.QUIT event means the user clicked X to close your window for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False if event.key == pygame.K_ESCAPE: running = False # fill the screen with a color to wipe away anything from last frame screen.fill("black") for wall in walls: pygame.draw.rect(screen, "grey", wall) end_pos = pygame.Vector2(player_pos[0] + 300, player_pos[1]) # pygame.draw.line(screen, "cyan", (640, 360), vector2) """--------------------------------------- WICHTIG: Vector2.rotate() ---------------------------------------""" ray_end = pygame.Vector2() light_points = [] vector = pygame.Vector2(300, 0) # Lichtstrahlen berechnen for i in range(360): rotated = vector.rotate(i) ray_end = player_pos + rotated # Überschneidung mit den Wänden prüfen for wall in walls: überschneidung = wall.clipline(player_pos, ray_end) if überschneidung: schnittpunkt = pygame.Vector2(überschneidung[0]) ray_end = schnittpunkt light_points.append(ray_end) pygame.draw.polygon( screen, "yellow", light_points ) pygame.draw.circle(screen, "red", player_pos, 40) keys = pygame.key.get_pressed() if keys[pygame.K_w]: player_pos.y -= 300 * dt if keys[pygame.K_s]: player_pos.y += 300 * dt if keys[pygame.K_a]: player_pos.x -= 300 * dt if keys[pygame.K_d]: player_pos.x += 300 * dt # flip() the display to put your work on screen pygame.display.flip() # limits FPS to 60 # dt is delta time in seconds since last frame, used for framerate- # independent physics. dt = clock.tick(60) / 1000 pygame.quit()