| @@ -15,9 +15,25 @@ def main ( | |||
| ) -> None: | |||
| pygame.init () | |||
| game = Game () | |||
| bg = Bg (game) | |||
| deerjika = Deerjika (game, DeerjikaPattern.RELAXED) | |||
| while True: | |||
| pass | |||
| for event in pygame.event.get (): | |||
| if event.type == pygame.QUIT: | |||
| pygame.quit () | |||
| sys.exit () | |||
| game.redraw () | |||
| class DeerjikaPattern (Enum): | |||
| NORMAL = auto () | |||
| RELAXED = auto () | |||
| SLEEPING = auto () | |||
| class Direction (Enum): | |||
| LEFT = auto () | |||
| RIGHT = auto () | |||
| class Game: | |||
| @@ -32,12 +48,15 @@ class Game: | |||
| self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT)) | |||
| self.clock = Clock () | |||
| self.frame = 0 | |||
| self.redrawers = [] | |||
| def redraw ( | |||
| self, | |||
| ) -> None: | |||
| for redrawer in sorted (self.redrawers, key = lambda x: x['layer']): | |||
| redrawer['func'] () | |||
| pygame.display.update () | |||
| self.clock.tick () | |||
| class GameObject: | |||
| @@ -47,16 +66,18 @@ class GameObject: | |||
| height: int | |||
| x: float | |||
| y: float | |||
| vx: float | |||
| vy: float | |||
| ax: float | |||
| ay: float | |||
| arg: float | |||
| vx: float = 0 | |||
| vy: float = 0 | |||
| ax: float = 0 | |||
| ay: float = 0 | |||
| arg: float = 0 | |||
| def __init__ ( | |||
| self, | |||
| game: Game, | |||
| layer: int | None = None, | |||
| x: float = 0, | |||
| y: float = 0, | |||
| ): | |||
| self.game = game | |||
| self.frame = 0 | |||
| @@ -66,6 +87,8 @@ class GameObject: | |||
| else: | |||
| layer = 0 | |||
| self.game.redrawers.append ({ 'layer': layer, 'func': self.redraw }) | |||
| self.x = x | |||
| self.y = y | |||
| def redraw ( | |||
| self, | |||
| @@ -77,6 +100,24 @@ class GameObject: | |||
| self.frame += 1 | |||
| class Bg (GameObject): | |||
| surface: Surface | |||
| def __init__ ( | |||
| self, | |||
| game: Game, | |||
| ): | |||
| super ().__init__ (game) | |||
| self.surface = pygame.image.load ('assets/bg.jpg') | |||
| self.surface = pygame.transform.scale (self.surface, (CWindow.WIDTH, CWindow.HEIGHT)) | |||
| def redraw ( | |||
| self, | |||
| ) -> None: | |||
| self.game.screen.blit (self.surface, (self.x, self.y)) | |||
| super ().redraw () | |||
| class Deerjika (GameObject): | |||
| surfaces: list[Surface] | |||
| size: int | |||
| @@ -87,8 +128,10 @@ class Deerjika (GameObject): | |||
| pattern: DeerjikaPattern = DeerjikaPattern.NORMAL, | |||
| direction: Direction = Direction.LEFT, | |||
| layer: int | None = None, | |||
| x: float = 0, | |||
| y: float = 0, | |||
| ): | |||
| super ().__init__ (game, layer) | |||
| super ().__init__ (game, layer, x, y) | |||
| self.pattern = pattern | |||
| self.direction = direction | |||
| match pattern: | |||
| @@ -97,7 +140,7 @@ class Deerjika (GameObject): | |||
| case DeerjikaPattern.RELAXED: | |||
| match direction: | |||
| case Direction.LEFT: | |||
| self.surfaces = get_surfaces_from_video ('deerjika_relax.mp4') | |||
| self.surfaces = get_surfaces_from_video ('assets/deerjika_relax.mp4') | |||
| case Direction.RIGHT: | |||
| ... | |||
| self.size = len (self.surfaces) | |||
| @@ -110,16 +153,6 @@ class Deerjika (GameObject): | |||
| super ().redraw () | |||
| class DeerjikaPattern (Enum): | |||
| NORMAL = auto () | |||
| RELAXED = auto () | |||
| class Direction (Enum): | |||
| LEFT = auto () | |||
| RIGHT = auto () | |||
| class CWindow: | |||
| WIDTH = 1024 | |||
| HEIGHT = 768 | |||