import pygame import math def draw_map(screen, player_pos, player_dir): screen.fill(pygame.Color(64,64,64)) pygame.draw.rect(screen, "blue", pygame.Rect(player_pos-(2.5,2.5),(5,5))) pygame.draw.line(screen, "blue", player_pos, player_pos+(player_dir)) def game_loop(): pygame.init() pygame.display.set_caption("Maze Raycaster") screen = pygame.display.set_mode((1280, 720)) top_view = pygame.Surface((screen.get_width() // 2, screen.get_height())) game_view = pygame.Surface((screen.get_width() // 2, screen.get_height())) myfont = pygame.font.SysFont("monospace", 15) clock = pygame.time.Clock() running = True dt = 0 player_pos = pygame.Vector2(200, 200) player_dir = pygame.Vector2(-100, 0) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False game_view.fill(pygame.Color(0,0,0)) draw_map(top_view, player_pos, player_dir) keys = pygame.key.get_pressed() if keys[pygame.K_w]: player_pos += player_dir * dt if keys[pygame.K_s]: player_pos -= player_dir * dt if keys[pygame.K_a]: player_pos -= player_dir.rotate(90) * dt if keys[pygame.K_d]: player_pos += player_dir.rotate(90) * dt if keys[pygame.K_q]: player_dir.rotate_ip(-90 * dt) if keys[pygame.K_e]: player_dir.rotate_ip(90 * dt) if keys[pygame.K_n]: player_dir.scale_to_length(player_dir.length() / 1.01) if keys[pygame.K_m]: player_dir.scale_to_length(player_dir.length() * 1.01) if keys[pygame.K_ESCAPE]: running = False screen.blit(top_view, (0,0)) screen.blit(game_view, (screen.get_width() // 2,0)) label = myfont.render( f"Player: {player_pos} {player_dir} {round(player_dir.length())}", True, (192,192,192) ) screen.blit(label, (10, 10)) pygame.display.update() dt = clock.tick(60) / 1000 pygame.quit() game_loop()