feat: add basic game loop
This commit is contained in:
1
main.py
1
main.py
@@ -4,6 +4,7 @@ from src.game import Game
|
|||||||
def main():
|
def main():
|
||||||
print("Welcome to Rally Racer !")
|
print("Welcome to Rally Racer !")
|
||||||
game: Game = Game()
|
game: Game = Game()
|
||||||
|
game.mainloop()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
51
src/game.py
51
src/game.py
@@ -1,9 +1,56 @@
|
|||||||
import pygame
|
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:
|
class Game:
|
||||||
DEFAULT_SIZE = (1280, 720)
|
DEFAULT_SIZE = (1280, 720)
|
||||||
|
BACKGROUND_COLOR = (80, 80, 80)
|
||||||
|
MAX_FPS = 60
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self) -> None:
|
||||||
pygame.init()
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user