class RunController: """ This class coordinates the entire game and transfers data between different parts This file must be run to start the game """ game: GameController = None gph: Graphics = None # Initialize objects def __init__(self, show_graphics: bool = True): self.running: bool = True self.game = GameController(self) RunController.game = self.game self.gph = Graphics(self, self.game.map, self.game.player) RunController.gph = self.gph self.game_events: list = [] self.show_graphics: bool = show_graphics self.graphics_events: deque = deque([]) # Update each frame def update(self): game_events = [] if self.graphics_events: game_events = self.game.event(self.graphics_events.popleft()) game_events.extend(self.game.update()) self.graphics_events.extend(self.gph.update(game_events)) if game_events is not None: for e in game_events: if e.type() == 'print': pass # print text output also to the console # print(e.get_value('text') if 'text' in e else e.value()) # Begin the game loop def run(self): # intro screen (or menu?) out = None self.gph.intro_start() while out is None: out = self.gph.intro_update() # main game loop while self.running: self.update() pygame.quit() # Exit the program def quit(self): self.running = False self.game.quit() self.gph.quit()
def main(): resolution = (1200, 800) max_fps = 50 default_backcolor = (0, 0, 0) pygame.init() screen = pygame.display.set_mode(resolution) clock = pygame.time.Clock() filename = os.path.normpath("assets/images/stars.jpg") image = pygame.image.load(filename) background_image = image.subsurface((0,0), (resolution[0], resolution[1])).copy() background_image.convert() background_image.set_alpha(127) main_event_queue = EventQueue() clock = pygame.time.Clock() context_data = { "clock": clock, "resolution": resolution, "screen": screen, } game_context = GameContext(context_data) game_controller = GameController(main_event_queue, game_context) loop = True clock.tick(max_fps) clock.tick(max_fps) # intro module sigla.intro_title(screen, game_context) pygame.time.wait(500) sigla.fade_to_black(resolution, screen) sigla.personaggi_entrano_in_scena(screen, game_context) sigla.fade_to_black(resolution, screen) while loop: loop = main_event_queue.handle_events() background_change, background, screen_elements = game_controller.update() screen.fill(default_backcolor) screen.blit(background_image, (0,0)) screen_elements.draw(screen) pygame.display.flip() clock.tick(max_fps)