feat: add basic game loop

This commit is contained in:
2025-10-18 01:32:18 +02:00
parent da8c64624f
commit 6276f97cce
2 changed files with 50 additions and 2 deletions

View File

@@ -4,6 +4,7 @@ from src.game import Game
def main():
print("Welcome to Rally Racer !")
game: Game = Game()
game.mainloop()
if __name__ == "__main__":

View File

@@ -1,9 +1,56 @@
import pygame
from src.camera import Camera
from src.car import Car
from src.track import Road, Track
from src.vec import Vec
class Game:
DEFAULT_SIZE = (1280, 720)
BACKGROUND_COLOR = (80, 80, 80)
MAX_FPS = 60
def __init__(self):
def __init__(self) -> None:
pygame.init()
self.win: pygame.Surface = pygame.display.set_mode(self.DEFAULT_SIZE)
self.win: pygame.Surface = pygame.display.set_mode(
self.DEFAULT_SIZE, pygame.RESIZABLE
)
pygame.display.set_caption("Rally Racer")
self.running: bool = True
self.track: Track = Track.load("simple")
self.car: Car = Car(self.track.start_pos, self.track.start_dir)
self.camera: Camera = Camera()
self.clock: pygame.time.Clock = pygame.time.Clock()
def mainloop(self):
while self.running:
self.process_pygame_events()
self.render()
self.clock.tick(60)
def process_pygame_events(self):
self.camera.set_pos(self.car.pos)
self.camera.set_direction(self.car.direction)
self.camera.set_size(Vec(*self.win.get_size()))
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.quit()
elif event.type == pygame.VIDEORESIZE:
self.camera.set_size(Vec(event.w, event.h))
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.quit()
def quit(self):
self.running = False
def render(self):
self.win.fill(self.BACKGROUND_COLOR)
road: Road = self.track.objects[0] # type: ignore
for i, pt in enumerate(road.pts):
pos: Vec = self.camera.world2screen(pt.pos)
col: float = i * 10 + 150
pygame.draw.circle(self.win, (col, 100, 100), pos, 5)
pygame.display.flip()