changeset 4:a6a9f884fb4a

Sword swinging
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 27 Apr 2013 21:12:36 +0200
parents 800c444c6a11
children 359046dd78bb
files blow/effects.png blow/game_scene.py blow/resources.py blow/skeleton.png blow/sprite.py blow/weapons.png
diffstat 6 files changed, 95 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
Binary file blow/effects.png has changed
--- a/blow/game_scene.py	Sat Apr 27 15:35:00 2013 +0200
+++ b/blow/game_scene.py	Sat Apr 27 21:12:36 2013 +0200
@@ -33,21 +33,102 @@
 
 
 class HeroSprite(JumpingSprite, Sprite):
+    def __init__(self, *args, **kwargs):
+        super(HeroSprite, self).__init__(*args, **kwargs)
+        self.depth = 3
+
     def update(self, tick):
-        keys = pygame.key.get_pressed()
-        if keys[pygame.K_LEFT]:
-            self.rect.move_ip(-6, 0)
-        elif keys[pygame.K_RIGHT]:
-            self.rect.move_ip(6, 0)
-        if keys[pygame.K_UP]:
-            if self.on_ground():
-                self.dy = -24
         super(HeroSprite, self).update(tick)
 
+    def can_jump(self):
+        return self.dy >= -4 and self.rect.bottom >= BOTTOM - 8
+
+
+class SkeletonSprite(JumpingSprite, Sprite):
+    def __init__(self, *args, **kwargs):
+        super(FallingSprite, self).__init__(*args, **kwargs)
+        self.dx, self.dy = -4, 0
+        self.depth = 1
+
+    def update(self, tick):
+        super(SkeletonSprite, self).update(tick)
+        if self.rect.left < 0:
+            self.dx = 4
+        elif self.rect.right > 780:
+            self.dx = -4
+
+class SwordSprite(Sprite):
+    def __init__(self, owner, *args, **kwargs):
+        super(SwordSprite, self).__init__(*args, **kwargs)
+        self.owner = owner
+        self.depth = 5
+        self.sx, self.sy = 0, 0
+
+    def update(self, tick):
+        super(SwordSprite, self).update(tick)
+        x, y = self.owner.rect.midleft
+        self.rect.center = x + self.sx, y + self.sy
+
+    def swing_animation(self):
+        self.image = self.frames[2]
+        self.sx, self.sy = 64, 0
+        yield
+        yield
+        self.image = self.frames[3]
+        self.sx, self.sy = 64, 14
+        yield
+        yield
+        self.image = self.frames[1]
+        self.sx, self.sy = 64, 18
+        yield
+        yield
+        self.image = self.frames[0]
+        self.sx, self.sy = 0, 0
+        yield
+        yield
+
+
+class SwooshSprite(Sprite):
+    def __init__(self, *args, **kwargs):
+        super(SwooshSprite, self).__init__(*args, **kwargs)
+        self.image = self.image.copy().convert()
+        self.animation = self.swoosh_animation()
+        self.depth = 9
+
+    def swoosh_animation(self):
+        for opacity in xrange(128, 0, -16):
+            self.image.set_alpha(opacity)
+            self.rect.move_ip(0, -1)
+            yield
+        self.kill()
+
 
 class GameScene(Scene):
     def __init__(self, display, resources):
         super(GameScene, self).__init__(display, resources)
-        self.background.fill((0xff, 0xff, 0xff))
-        self.sprites.add(HeroSprite(self.resources.hero))
+        self.background.fill((0xfe, 0xfd, 0xff))
+        self.hero = HeroSprite(self.resources.hero)
+        self.sprites.add(self.hero)
+        self.sword = SwordSprite(self.hero, self.resources.weapons)
+        self.sprites.add(self.sword)
+        skeleton = SkeletonSprite(self.resources.skeleton)
+        skeleton.rect.move_ip(716, 0)
+        self.sprites.add(skeleton)
 
+    def update(self, *args, **kwargs):
+        super(GameScene, self).update(*args, **kwargs)
+        keys = pygame.key.get_pressed()
+        if keys[pygame.K_LEFT]:
+            self.hero.rect.move_ip(-6, 0)
+        elif keys[pygame.K_RIGHT]:
+            self.hero.rect.move_ip(6, 0)
+        if keys[pygame.K_UP]:
+            if self.hero.can_jump():
+                self.hero.dy = -16
+        if keys[pygame.K_SPACE]:
+            if self.sword.animation is None:
+                self.sword.animation = self.sword.swing_animation()
+                self.hero.dy = -2
+                swoosh = SwooshSprite(self.resources.effects)
+                swoosh.rect.midtop = self.hero.rect.topright
+                self.sprites.add(swoosh)
--- a/blow/resources.py	Sat Apr 27 15:35:00 2013 +0200
+++ b/blow/resources.py	Sat Apr 27 21:12:36 2013 +0200
@@ -11,6 +11,9 @@
 class Resources(object):
     def __init__(self):
         self.hero = self.load_atlas('hero.png', 64, 64)
+        self.skeleton = self.load_atlas('skeleton.png', 64, 64)
+        self.weapons = self.load_atlas('weapons.png', 64, 64)
+        self.effects = self.load_atlas('effects.png', 64, 64)
 
     @staticmethod
     def load_sound(filename):
Binary file blow/skeleton.png has changed
--- a/blow/sprite.py	Sat Apr 27 15:35:00 2013 +0200
+++ b/blow/sprite.py	Sat Apr 27 21:12:36 2013 +0200
@@ -6,7 +6,7 @@
 class SortedUpdates(pygame.sprite.RenderUpdates):
     def sprites(self):
         return sorted(self.spritedict.keys(),
-                      key=lambda s: s.rect.bottom + getattr(s, 'depth', 0))
+                      key=lambda s: getattr(s, 'depth', 0))
 
 
 class Sprite(pygame.sprite.Sprite):
Binary file blow/weapons.png has changed