#31 本日作業分

このコミットが含まれているのは:
2024-12-09 17:34:57 +09:00
コミット c83c99bc74
+51 -18
ファイルの表示
@@ -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 vx: float = 0
vy: float vy: float = 0
ax: float ax: float = 0
ay: float ay: float = 0
arg: float 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