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():
|
||||
print("Welcome to Rally Racer !")
|
||||
game: Game = Game()
|
||||
game.mainloop()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
51
src/game.py
51
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()
|
||||
|
||||
Reference in New Issue
Block a user