AI 移行 #38
@@ -153,6 +153,7 @@ class Game:
|
||||
|
||||
bgm: Sound
|
||||
clock: Clock
|
||||
fps: float
|
||||
frame: int
|
||||
last_answered_at: datetime
|
||||
now: datetime
|
||||
@@ -166,6 +167,7 @@ class Game:
|
||||
self.now = datetime.now ()
|
||||
self.screen = pygame.display.set_mode ((CWindow.WIDTH, CWindow.HEIGHT))
|
||||
self.clock = Clock ()
|
||||
self.fps = FPS
|
||||
self.frame = 0
|
||||
self.objects = []
|
||||
self.bgm = Sound ('assets/bgm.mp3')
|
||||
@@ -182,7 +184,13 @@ class Game:
|
||||
if obj.enabled:
|
||||
obj.redraw ()
|
||||
pygame.display.update ()
|
||||
self.clock.tick (FPS)
|
||||
delta_time = self.clock.tick (FPS) / 1000
|
||||
self.fps = 1 / delta_time
|
||||
if delta_time > 1 / FPS:
|
||||
for _ in range (int (FPS * delta_time) - 1):
|
||||
for obj in self.objects:
|
||||
if obj.enabled:
|
||||
obj.update ()
|
||||
|
||||
def _create_sky (
|
||||
self,
|
||||
@@ -249,6 +257,11 @@ class GameObject:
|
||||
|
||||
def redraw (
|
||||
self,
|
||||
) -> None:
|
||||
self.update ()
|
||||
|
||||
def update (
|
||||
self,
|
||||
) -> None:
|
||||
self.x += self.vx
|
||||
self.y += self.vy
|
||||
@@ -335,6 +348,8 @@ class Deerjika (Creature):
|
||||
width (int): 幅 (px)
|
||||
"""
|
||||
|
||||
FPS = 30
|
||||
|
||||
height: int
|
||||
scale: float = .8
|
||||
surfaces: list[Surface]
|
||||
@@ -379,15 +394,21 @@ class Deerjika (Creature):
|
||||
def redraw (
|
||||
self,
|
||||
) -> None:
|
||||
surface = pygame.transform.scale (self.surfaces[self.frame % len (self.surfaces)],
|
||||
surface = pygame.transform.scale (self.surfaces[self.frame * self.FPS // FPS
|
||||
% len (self.surfaces)],
|
||||
(self.width * self.scale, self.height * self.scale))
|
||||
self.game.screen.blit (surface, surface.get_rect (center = (self.x, self.y)))
|
||||
super ().redraw ()
|
||||
|
||||
def update (
|
||||
self,
|
||||
) -> None:
|
||||
if (not self.balloon.enabled) and self.talking:
|
||||
self.talking = False
|
||||
if (self.balloon.enabled and self.balloon.frame >= FPS * 1.5
|
||||
and not self.talking):
|
||||
self.read_out ()
|
||||
super ().update ()
|
||||
|
||||
def talk (
|
||||
self,
|
||||
@@ -445,7 +466,7 @@ class CurrentTime (GameObject):
|
||||
) -> None:
|
||||
for i in range (4):
|
||||
self.game.screen.blit (
|
||||
self.font.render (str (self.game.now), True, (0, 0, 0)),
|
||||
self.font.render (f"{ self.game.now } { self.game.fps } fps", True, (0, 0, 0)),
|
||||
(i % 2, i // 2 * 2))
|
||||
super ().redraw ()
|
||||
|
||||
@@ -557,6 +578,10 @@ class KitaSun (GameObject):
|
||||
surface = pygame.transform.rotate (self.surface, -(90 + math.degrees (self.arg)))
|
||||
self.game.screen.blit (surface, surface.get_rect (center = (self.x, self.y)))
|
||||
super ().redraw ()
|
||||
|
||||
def update (
|
||||
self,
|
||||
) -> None:
|
||||
self.sun.compute (self.game.sky.observer)
|
||||
self.alt = self.sun.alt
|
||||
self.az = self.sun.az
|
||||
@@ -564,6 +589,7 @@ class KitaSun (GameObject):
|
||||
self.arg = self.new_arg
|
||||
self.x = self.new_x
|
||||
self.y = self.new_y
|
||||
super ().update ()
|
||||
|
||||
@property
|
||||
def new_x (
|
||||
@@ -620,6 +646,10 @@ class Jojoko (GameObject):
|
||||
surface.set_colorkey ((0, 255, 0))
|
||||
self.game.screen.blit (surface, surface.get_rect (center = (self.x, self.y)))
|
||||
super ().redraw ()
|
||||
|
||||
def update (
|
||||
self,
|
||||
) -> None:
|
||||
self.moon.compute (self.game.sky.observer)
|
||||
self.alt = self.moon.alt
|
||||
self.az = self.moon.az
|
||||
@@ -627,6 +657,7 @@ class Jojoko (GameObject):
|
||||
self.arg = self.new_arg
|
||||
self.x = self.new_x
|
||||
self.y = self.new_y
|
||||
super ().update ()
|
||||
|
||||
@property
|
||||
def phase (
|
||||
|
||||
新しい課題から参照
ユーザをブロックする