mazes2/game.py

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()