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
Binary file blow/congrats.png has changed
--- /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)
+
+
Binary file blow/gameover.png has changed
--- 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')
Binary file blow/title.png has changed
--- 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)