diff --git a/main.py b/main.py index b80d2f7..1fbd05d 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ from src.game import Game def main(): print("Welcome to Rally Racer !") game: Game = Game() + game.mainloop() if __name__ == "__main__": diff --git a/src/game.py b/src/game.py index 0ec50a7..2d01cd9 100644 --- a/src/game.py +++ b/src/game.py @@ -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()