| @@ -15,9 +15,25 @@ def main ( | |||||
| ) -> None: | ) -> None: | ||||
| pygame.init () | pygame.init () | ||||
| game = Game () | game = Game () | ||||
| bg = Bg (game) | |||||
| deerjika = Deerjika (game, DeerjikaPattern.RELAXED) | deerjika = Deerjika (game, DeerjikaPattern.RELAXED) | ||||
| while True: | 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: | class Game: | ||||
| @@ -32,12 +48,15 @@ class Game: | |||||
| self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT)) | self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT)) | ||||
| self.clock = Clock () | self.clock = Clock () | ||||
| self.frame = 0 | self.frame = 0 | ||||
| self.redrawers = [] | |||||
| def redraw ( | def redraw ( | ||||
| self, | self, | ||||
| ) -> None: | ) -> None: | ||||
| for redrawer in sorted (self.redrawers, key = lambda x: x['layer']): | for redrawer in sorted (self.redrawers, key = lambda x: x['layer']): | ||||
| redrawer['func'] () | redrawer['func'] () | ||||
| pygame.display.update () | |||||
| self.clock.tick () | |||||
| class GameObject: | class GameObject: | ||||
| @@ -47,16 +66,18 @@ class GameObject: | |||||
| height: int | height: int | ||||
| x: float | x: float | ||||
| y: 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__ ( | def __init__ ( | ||||
| self, | self, | ||||
| game: Game, | game: Game, | ||||
| layer: int | None = None, | layer: int | None = None, | ||||
| x: float = 0, | |||||
| y: float = 0, | |||||
| ): | ): | ||||
| self.game = game | self.game = game | ||||
| self.frame = 0 | self.frame = 0 | ||||
| @@ -66,6 +87,8 @@ class GameObject: | |||||
| else: | else: | ||||
| layer = 0 | layer = 0 | ||||
| self.game.redrawers.append ({ 'layer': layer, 'func': self.redraw }) | self.game.redrawers.append ({ 'layer': layer, 'func': self.redraw }) | ||||
| self.x = x | |||||
| self.y = y | |||||
| def redraw ( | def redraw ( | ||||
| self, | self, | ||||
| @@ -77,6 +100,24 @@ class GameObject: | |||||
| self.frame += 1 | 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): | class Deerjika (GameObject): | ||||
| surfaces: list[Surface] | surfaces: list[Surface] | ||||
| size: int | size: int | ||||
| @@ -87,8 +128,10 @@ class Deerjika (GameObject): | |||||
| pattern: DeerjikaPattern = DeerjikaPattern.NORMAL, | pattern: DeerjikaPattern = DeerjikaPattern.NORMAL, | ||||
| direction: Direction = Direction.LEFT, | direction: Direction = Direction.LEFT, | ||||
| layer: int | None = None, | layer: int | None = None, | ||||
| x: float = 0, | |||||
| y: float = 0, | |||||
| ): | ): | ||||
| super ().__init__ (game, layer) | |||||
| super ().__init__ (game, layer, x, y) | |||||
| self.pattern = pattern | self.pattern = pattern | ||||
| self.direction = direction | self.direction = direction | ||||
| match pattern: | match pattern: | ||||
| @@ -97,7 +140,7 @@ class Deerjika (GameObject): | |||||
| case DeerjikaPattern.RELAXED: | case DeerjikaPattern.RELAXED: | ||||
| match direction: | match direction: | ||||
| case Direction.LEFT: | 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: | case Direction.RIGHT: | ||||
| ... | ... | ||||
| self.size = len (self.surfaces) | self.size = len (self.surfaces) | ||||
| @@ -110,16 +153,6 @@ class Deerjika (GameObject): | |||||
| super ().redraw () | super ().redraw () | ||||
| class DeerjikaPattern (Enum): | |||||
| NORMAL = auto () | |||||
| RELAXED = auto () | |||||
| class Direction (Enum): | |||||
| LEFT = auto () | |||||
| RIGHT = auto () | |||||
| class CWindow: | class CWindow: | ||||
| WIDTH = 1024 | WIDTH = 1024 | ||||
| HEIGHT = 768 | HEIGHT = 768 | ||||