diff options
author | Viljami Ilola <+@hix.fi> | 2024-03-28 22:28:45 +0200 |
---|---|---|
committer | Viljami Ilola <+@hix.fi> | 2024-03-28 22:28:45 +0200 |
commit | f894c2fd09ed17540c49cb4083573861ded76554 (patch) | |
tree | cedbe5bab1b5f91b7e3dfb70c17f5114034e700e /src/sliceitoff/game | |
parent | f502b21183d307fcab9b353aa18609d15c3547f1 (diff) |
Show as sprite group with update
Diffstat (limited to 'src/sliceitoff/game')
-rw-r--r-- | src/sliceitoff/game/game.py | 8 | ||||
-rw-r--r-- | src/sliceitoff/game/initials.py | 2 | ||||
-rw-r--r-- | src/sliceitoff/game/level.py | 51 | ||||
-rw-r--r-- | src/sliceitoff/game/show.py | 33 |
4 files changed, 54 insertions, 40 deletions
diff --git a/src/sliceitoff/game/game.py b/src/sliceitoff/game/game.py index 0b67d2f..982466b 100644 --- a/src/sliceitoff/game/game.py +++ b/src/sliceitoff/game/game.py @@ -31,15 +31,15 @@ class Game: def welcome(self): ws = Show(welcome_screen()) dt = 0 - while ws.step(dt): - dt = self.clock.tick() + while ws.active: + ws.update(dt = self.clock.tick()) self.display.update( [ws] ) def show_highscores(self): his = Show(hiscores_screen(str(self.hiscores))) dt = 0 - while his.step(dt): - dt = self.clock.tick() + while his.active: + his.update(dt = self.clock.tick()) self.display.update( [his] ) def newgame(self): diff --git a/src/sliceitoff/game/initials.py b/src/sliceitoff/game/initials.py index 5b25195..a317dd9 100644 --- a/src/sliceitoff/game/initials.py +++ b/src/sliceitoff/game/initials.py @@ -38,7 +38,7 @@ class Initials(pygame.sprite.Group): self.name = self.name [:-1] elif pygame.key.name(event.key): self.name += pygame.key.name(event.key)[0].upper() - self.name = self.name[:8] + self.name = self.name[:3] self.empty() self.add(initials_screen(self.name)) return True diff --git a/src/sliceitoff/game/level.py b/src/sliceitoff/game/level.py index 15668a4..f0bb871 100644 --- a/src/sliceitoff/game/level.py +++ b/src/sliceitoff/game/level.py @@ -9,16 +9,24 @@ from stats import Stats from screens import levelup_screen, gameover_screen, level_screen from .gameplay import Gameplay from .anykey import anykey +from .show import Show class Level: """ One level that can be played """ def __init__(self, display = None): self.display = display + self.ended = False self.status = Status() self.field = Field() self.enemies = Enemies() self.player = Player() + self.player_single = pygame.sprite.Group() + + self.level_info = Show(level_screen()) + self.game_over = Show(gameover_screen(), active = False) + self.levelup = Show(levelup_screen(), active = False) + self.gameplay = Gameplay( player = self.player, status = self.status, @@ -27,37 +35,40 @@ class Level: self.obj_classes = [ self.status, self.field, - self.enemies] - self.level_info = level_screen() - self.level_over = None + self.enemies, + self.game_over, + self.levelup, + self.level_info] def step(self, dt): - for obj in self.obj_classes: - obj.update(dt = dt) - + self.status.update(dt = dt) + self.field.update(dt = dt) + self.enemies.update(dt = dt) self.enemies.hit_walls(self.field.active_sprites()) - objs = self.obj_classes[:] - if self.level_info: - if anykey(): - self.level_info = None + if self.level_info.active: + self.level_info.update(dt = dt) + + elif self.ended: + if self.game_over.active: + self.game_over.update(dt = dt) + elif self.levelup.active: + self.levelup.update(dt = dt) else: - objs += [self.level_info] - elif self.level_over: - objs += [self.level_over] - if anykey(): return False + else: - objs += [pygame.sprite.GroupSingle( - sprite = self.player.get_top_sprite())] + self.player_single = pygame.sprite.GroupSingle( + sprite = self.player.get_top_sprite()) Stats.update_bonus(dt) if self.gameplay.step(): + self.player_single = pygame.sprite.Group() + self.ended = True if Stats.lives: - self.level_over = levelup_screen() + self.levelup.active = True else: - self.level_over = gameover_screen() + self.game_over.active = True - self.display.update(objs) - + self.display.update(self.obj_classes+[self.player_single]) return True diff --git a/src/sliceitoff/game/show.py b/src/sliceitoff/game/show.py index 07146c3..018e555 100644 --- a/src/sliceitoff/game/show.py +++ b/src/sliceitoff/game/show.py @@ -4,24 +4,27 @@ from .anykey import anykey class Show(pygame.sprite.Group): """ To show some sprites and quit on any key """ - def __init__(self, sprites = []): + def __init__(self, sprites = None, active = True): super().__init__() self.add(sprites) + self.active = active + self.explode = False self.fadeout = 1_000 - self.timeout = 5_000 + self.timeout = 15_000 - def step(self, dt): - if self.fadeout < 0: - return False - - if self.timeout < 0: + def update(self, dt = 0, **kwargs): + super().update(dt = dt, explode = self.explode, **kwargs) + if self.fadeout <= 0: + self.active = False + elif self.timeout <= 0: if anykey(): - return False + self.fadeout = 0 self.fadeout -= dt - self.update(explode=dt) - return True - - if anykey(): - self.timeout = 0 - self.timeout -= dt - return True + self.explode = True + else: + if anykey(): + self.timeout = 0 + self.timeout -= dt + + def sprites(self): + return super().sprites() if self.active else None
\ No newline at end of file |