| @@ -146,7 +146,7 @@ class Game: | |||
| frame (int): フレーム・カウンタ | |||
| last_answered_at (datetime): 最後に回答した時刻 | |||
| now (datetime): 基準日時 | |||
| redrawers (list[Redrawer]): 再描画するクラスのリスト | |||
| objects (list[GameObject]): 再描画するクラスのリスト | |||
| screen (Surface): 基底スクリーン | |||
| sky (Sky): 天体情報 | |||
| """ | |||
| @@ -156,7 +156,7 @@ class Game: | |||
| frame: int | |||
| last_answered_at: datetime | |||
| now: datetime | |||
| redrawers: list[Redrawer] | |||
| objects: list[GameObject] | |||
| screen: Surface | |||
| sky: Sky | |||
| @@ -167,7 +167,7 @@ class Game: | |||
| self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT)) | |||
| self.clock = Clock () | |||
| self.frame = 0 | |||
| self.redrawers = [] | |||
| self.objects = [] | |||
| self.bgm = Sound ('assets/bgm.mp3') | |||
| self.bgm.set_volume (.15) | |||
| self.bgm.play (loops = -1) | |||
| @@ -178,9 +178,9 @@ class Game: | |||
| ) -> None: | |||
| self.now = datetime.now () | |||
| self.sky.observer.date = self.now - timedelta (hours = 9) | |||
| for redrawer in sorted (self.redrawers, key = lambda x: x['layer']): | |||
| if redrawer['obj'].enabled: | |||
| redrawer['obj'].redraw () | |||
| for obj in sorted (self.objects, key = lambda obj: obj.layer): | |||
| if obj.enabled: | |||
| obj.redraw () | |||
| pygame.display.update () | |||
| self.clock.tick (FPS) | |||
| @@ -219,6 +219,7 @@ class GameObject: | |||
| frame: int | |||
| game: Game | |||
| height: int | |||
| layer: float | |||
| vx: float = 0 | |||
| vy: float = 0 | |||
| width: int | |||
| @@ -228,22 +229,23 @@ class GameObject: | |||
| def __init__ ( | |||
| self, | |||
| game: Game, | |||
| layer: int | None = None, | |||
| enabled: bool = True, | |||
| x: float = 0, | |||
| y: float = 0, | |||
| layer: float | None = None, | |||
| enabled: bool = True, | |||
| x: float = 0, | |||
| y: float = 0, | |||
| ): | |||
| self.game = game | |||
| self.enabled = enabled | |||
| self.frame = 0 | |||
| if layer is None: | |||
| if self.game.redrawers: | |||
| layer = max (r['layer'] for r in self.game.redrawers) + 10 | |||
| if self.game.objects: | |||
| layer = max (obj.layer for obj in self.game.objects) + 10 | |||
| else: | |||
| layer = 0 | |||
| self.game.redrawers.append ({ 'layer': layer, 'obj': self }) | |||
| self.layer = layer | |||
| self.x = x | |||
| self.y = y | |||
| self.game.objects.append (self) | |||
| def redraw ( | |||
| self, | |||
| @@ -346,7 +348,7 @@ class Deerjika (Creature): | |||
| game: Game, | |||
| pattern: DeerjikaPattern = DeerjikaPattern.NORMAL, | |||
| direction: Direction = Direction.LEFT, | |||
| layer: int | None = None, | |||
| layer: float | None = None, | |||
| x: float = 0, | |||
| y: float = 0, | |||
| balloon: Balloon | None = None, | |||
| @@ -699,19 +701,6 @@ class CWindow: | |||
| HEIGHT = 768 | |||
| class Redrawer (TypedDict): | |||
| """ | |||
| 再描画処理を行ふゲーム・オブゼクトとその優先順位のペア | |||
| Attributes: | |||
| layer (int): レイア | |||
| obj (GameObject): ゲーム・オブゼクト | |||
| """ | |||
| layer: int | |||
| obj: GameObject | |||
| def get_surfaces_from_video ( | |||
| video_path: str, | |||
| ) -> list[Surface]: | |||