73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
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()
|