Mercurial > blow
changeset 19:64dfb9a4d35a default tip
Add end scenes, tweak difficulty
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Mon, 29 Apr 2013 18:34:23 +0200 |
| parents | c2d7adb7ef41 |
| children | |
| files | blow/congrats.png blow/end_scene.py blow/game_scene.py blow/gameover.png blow/resources.py blow/title.png blow/title_scene.py |
| diffstat | 7 files changed, 84 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/blow/end_scene.py Mon Apr 29 18:34:23 2013 +0200 @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +import pygame + +from blow.scene import Scene + + +class WinScene(Scene): + def __init__(self, display, resources): + super(WinScene, self).__init__(display, resources) + self.background = resources.congrats + self.ready = False + self.resources.death.stop() + self.resources.theme.stop() + self.resources.win.play(loops=-1) + + def update(self, scenes): + super(WinScene, self).update(scenes) + keys = pygame.key.get_pressed() + if keys[pygame.K_RETURN]: + self.ready = True + elif self.ready: + self.ready = False + self.first = True + scenes.remove(self) + self.resources.win.stop() + self.resources.theme.play(loops=-1) + + +class LoseScene(Scene): + def __init__(self, display, resources): + super(LoseScene, self).__init__(display, resources) + self.background = resources.gameover + self.ready = False + self.resources.theme.stop() + self.resources.win.stop() + self.resources.death.play(loops=-1) + + def update(self, scenes): + super(LoseScene, self).update(scenes) + keys = pygame.key.get_pressed() + if keys[pygame.K_RETURN]: + self.ready = True + elif self.ready: + self.ready = False + self.first = True + scenes.remove(self) + self.resources.death.stop() + self.resources.theme.play(loops=-1)
--- a/blow/game_scene.py Mon Apr 29 13:20:58 2013 +0200 +++ b/blow/game_scene.py Mon Apr 29 18:34:23 2013 +0200 @@ -6,11 +6,20 @@ from blow.sprite import Sprite from blow.scene import Scene, GameOver - +from blow.end_scene import WinScene, LoseScene BOTTOM = 420 SCROLL = 64 + +class GameWon(GameOver): + pass + + +class GameLost(GameOver): + pass + + class SlowingSprite(object): def __init__(self, *args, **kwargs): super(SlowingSprite, self).__init__(*args, **kwargs) @@ -112,7 +121,7 @@ elif self.rect.right > 768 - SCROLL: scene.scroll(-6, 0) if self.hp <= 0 and not self.stunned: - raise GameOver('lost') + raise GameLost('lost') def stun(self, scene): @@ -206,16 +215,16 @@ def jump_left_animation(self, scene): self.image = self.frames[0] - self.dy = -16 - self.dx = -6 + self.dy = -22 + self.dx = -8 while self.dy < -4 or not self.on_ground(): yield self.dx = 0 def jump_right_animation(self, scene): self.image = self.frames[-1] - self.dy = -16 - self.dx = 6 + self.dy = -22 + self.dx = 8 while self.dy < -4 or not self.on_ground(): yield self.dx = 0 @@ -328,7 +337,7 @@ self.dead = True for i in xrange(80): yield - raise GameOver('won') + raise GameWon('won') class SwordSprite(Sprite): @@ -412,19 +421,19 @@ self.hero = HeroSprite(self) self.sprites.add(self.hero) - for i in xrange(26): + for i in xrange(64): frames = random.choice([ self.resources.skeleton, self.resources.beast, ]) monster = MonsterSprite(frames) monster.rect.move_ip( - 400 + i * (128 - i * 3) + random.randint(-64, 64), + 400 + i * (128 - i * 2) + random.randint(-64, 64), BOTTOM - random.randint(64, 256), ) self.monsters.add(monster) boss = BossSprite(self.resources.boss) - boss.rect.midbottom = (2048, BOTTOM - 16) + boss.rect.midbottom = (2560, BOTTOM - 16) self.monsters.add(boss) self.sprites.add(self.monsters) @@ -436,3 +445,16 @@ for sprite in self.sprites: sprite.rect.move_ip(x, y) + def update(self, scenes): + tick = self.display.update(self.background, self.sprites, self.first) + self.first = False + try: + self.sprites.update(tick, self) + except GameWon: + scenes.append(WinScene(self.display, self.resources)) + scenes.remove(self) + except GameLost: + scenes.append(LoseScene(self.display, self.resources)) + scenes.remove(self) + +
--- a/blow/resources.py Mon Apr 29 13:20:58 2013 +0200 +++ b/blow/resources.py Mon Apr 29 18:34:23 2013 +0200 @@ -18,6 +18,8 @@ self.effects = self.load_atlas('effects.png', 64, 64) self.tree = self.load_atlas('tree.png', 256, 256) self.title = self.load_image('title.png') + self.gameover = self.load_image('gameover.png') + self.congrats = self.load_image('congrats.png') self.swoosh = self.load_sound('swoosh.wav') self.hit = self.load_sound('hit.wav') self.bark = self.load_sound('bark.wav')
--- a/blow/title_scene.py Mon Apr 29 13:20:58 2013 +0200 +++ b/blow/title_scene.py Mon Apr 29 18:34:23 2013 +0200 @@ -13,7 +13,7 @@ self.ready = False self.resources.win.stop() self.resources.death.stop() - self.resources.theme.play() + self.resources.theme.play(loops=-1) def update(self, scenes): super(TitleScene, self).update(scenes)
