diff --git a/snake/game_loop.py b/snake/game_loop.py new file mode 100644 index 0000000..0f941b5 --- /dev/null +++ b/snake/game_loop.py @@ -0,0 +1,40 @@ +import pygame +from game_object import GameObject +from window import Window +from input_manager import InputManager + + +class GameLoop: + def __init__(self, window: Window, game_objs: list[GameObject], input_manager: InputManager): + self.__window = window + self.__game_objs = game_objs + self.__input_manager = input_manager + + + @staticmethod + def __draw_all(window: Window, game_objs: list[GameObject]) -> None: + window.reset() + + for obj in game_objs: + window.draw_object(obj) + + + @staticmethod + def __update_all(game_objs: list[GameObject], user_input: int) -> None: + for obj in game_objs: + obj.update(user_input, game_objs) + + + def run(self, framerate=15): + clock = pygame.time.Clock() + + last_input = None + + while last_input != InputManager.QUIT: + last_input = self.__input_manager.process_input() + + GameLoop.__update_all(self.__game_objs, last_input) + GameLoop.__draw_all(self.__window, self.__game_objs) + + clock.tick(framerate) + pygame.display.flip() \ No newline at end of file diff --git a/snake/main.py b/snake/main.py index 78e90fc..11b7f50 100644 --- a/snake/main.py +++ b/snake/main.py @@ -1,4 +1,3 @@ -import pygame from window import Window from input_manager import InputManager from snake import Snake @@ -6,18 +5,7 @@ from game_object import GameObject from wall import Wall from prey import Prey from game_over_screen import GameOverScreen - - -def draw_all(window: Window, game_objs: list[GameObject]) -> None: - window.reset() - - for obj in game_objs: - window.draw_object(obj) - - -def update_all(game_objs: list[GameObject], user_input: int) -> None: - for obj in game_objs: - obj.update(user_input, game_objs) +from game_loop import GameLoop def create_game_objects(window: Window): @@ -37,19 +25,10 @@ def create_game_objects(window: Window): if __name__ == '__main__': window = Window(title='Snake', size=(800, 600), background_color=(0, 128, 0)) - input_manager = InputManager() - game_objs = create_game_objects(window) + game_loop = GameLoop(window=window, + game_objs=create_game_objects(window), + input_manager=InputManager()) + + game_loop.run(framerate=15) + - clock = pygame.time.Clock() - framerate = 15 - - last_input = None - - while last_input != InputManager.QUIT: - last_input = input_manager.process_input() - - update_all(game_objs, last_input) - draw_all(window, game_objs) - - clock.tick(framerate) - pygame.display.flip()