feat: add basic game loop
This commit is contained in:
		
							
								
								
									
										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