school-horror-game/testen/der_test.py

105 lines
2.3 KiB
Python
Raw Normal View History

2026-08-21 16:23:35 +00:00
import math
2026-08-26 16:35:06 +00:00
import pygame
2026-08-21 16:23:35 +00:00
# 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)
2026-08-26 16:35:06 +00:00
walls = [
pygame.Rect(980, 100, 50, 440),
pygame.Rect(280, 650, 720, 35),
]
2026-08-21 16:23:35 +00:00
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
2026-08-26 16:35:06 +00:00
if event.key == pygame.K_ESCAPE:
running = False
2026-08-21 16:23:35 +00:00
# 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)
2026-08-26 16:35:06 +00:00
end_pos = pygame.Vector2(player_pos[0] + 300, player_pos[1])
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
# pygame.draw.line(screen, "cyan", (640, 360), vector2)
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
"""--------------------------------------- WICHTIG: Vector2.rotate() ---------------------------------------"""
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
ray_end = pygame.Vector2()
light_points = []
vector = pygame.Vector2(300, 0)
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
# Lichtstrahlen berechnen
for i in range(360):
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
rotated = vector.rotate(i)
ray_end = player_pos + rotated
2026-08-21 16:23:35 +00:00
2026-08-26 16:35:06 +00:00
# Ü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)
2026-08-21 16:23:35 +00:00
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
2026-08-26 16:35:06 +00:00
pygame.quit()