changeset 6:1f05f6b2e08b

Animation tweaks
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 26 Feb 2012 00:16:13 +0100
parents 87f7a58587cd
children c8ec5029a5f9
files mhrok.png mhrok.py
diffstat 2 files changed, 52 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
Binary file mhrok.png has changed
--- a/mhrok.py	Sat Feb 25 23:34:30 2012 +0100
+++ b/mhrok.py	Sun Feb 26 00:16:13 2012 +0100
@@ -109,31 +109,15 @@
 
 class Level(object):
     def __init__(self, tiles, (width, height), pc):
-        self.sprites = SortedUpdates()
-        self.shadows = pygame.sprite.RenderUpdates()
-        self.sprites.add(pc)
-        self.shadows.add(Shadow(pc.frames, pc))
-
-        bat = Bat(pc.frames, 2, 3)
-        self.sprites.add(bat)
-        self.shadows.add(Shadow(pc.frames, bat))
-
-        chest = Chest(pc.frames, 4, 2)
-        self.sprites.add(chest)
-        self.shadows.add(Shadow(pc.frames, chest))
-
-        skeleton = Skeleton(pc.frames, 5, 3)
-        self.sprites.add(skeleton)
-        self.shadows.add(Shadow(pc.frames, skeleton))
-
-
         self.tiles = tiles
         self.background = pygame.Surface((width * 20 + 28, height * 12 + 36))
+        blood = self.tiles[21].copy()
+        blood.set_alpha(220)
         for y in range(height):
             for x in range(width):
                 self.background.blit(self.tiles[23], (x * 20 + 6, y * 12))
-                if x == 1 and y == 2:
-                    self.background.blit(self.tiles[21], (x * 20 + 6, y * 12))
+                if (9*x + 5*y + 2) % (y+3) == 3:
+                    self.background.blit(blood, (x * 20 + 6, y * 12))
         for x in range(width):
             if x != 3:
                 self.background.blit(self.tiles[4], (x * 20 + 6, 0))
@@ -148,39 +132,68 @@
             else:
                 self.background.blit(self.tiles[29], (6, y * 12))
                 self.background.blit(self.tiles[39], (width * 20 - 14, y * 12))
-        self.first_draw = True
 
-    def draw(self, screen):
-        if self.first_draw:
-            screen.blit(self.background, (0, 0))
-            self.shadows.draw(screen)
-            self.sprites.draw(screen)
-            self.first_draw = False
-            return self.background.get_rect()
-        self.sprites.clear(screen, self.background)
-        self.shadows.draw(screen)
-        dirty = self.sprites.draw(screen)
-        self.sprites.update()
-        self.shadows.update()
-        return dirty
 
 
 class Game(object):
     def __init__(self):
         pygame.display.init()
-        self.screen = pygame.display.set_mode((640, 400))
+        self.screen = pygame.display.set_mode((320, 200))
         pygame.display.set_caption('Mhrok')
         self.tiles = load_tiles('mhrok.png', 32, 32)
         self.clock = pygame.time.Clock()
         self.game_over = False
-        self.pc = PlayerCharacter(self.tiles, 0, 0)
-        self.level = Level(self.tiles, (5, 5), self.pc)
+        self.first_draw = True
+
+        pc = PlayerCharacter(self.tiles, 0, 0)
+        self.pc = pc
+        self.level = Level(self.tiles, (10, 10), self.pc)
+
+        self.background = pygame.Surface(self.screen.get_size())
+        self.background.blit(self.level.background, (0, 0))
+
+        self.sprites = SortedUpdates()
+        self.shadows = pygame.sprite.RenderUpdates()
+        self.sprites.add(pc)
+        self.shadows.add(Shadow(self.tiles, pc))
+
+        bat = Bat(self.tiles, 2, 3)
+        self.sprites.add(bat)
+        self.shadows.add(Shadow(self.tiles, bat))
+
+        chest = Chest(self.tiles, 4, 2)
+        self.sprites.add(chest)
+        self.shadows.add(Shadow(self.tiles, chest))
+
+        skeleton = Skeleton(self.tiles, 5, 3)
+        self.sprites.add(skeleton)
+        self.shadows.add(Shadow(self.tiles, skeleton))
+
+        teddy = Teddybear(self.tiles, 7, 5)
+        self.sprites.add(teddy)
+        self.shadows.add(Shadow(self.tiles, teddy))
+
+
+    def draw(self):
+        if self.first_draw:
+            self.screen.blit(self.background, (0, 0))
+            self.shadows.draw(self.screen)
+            self.sprites.draw(self.screen)
+            self.first_draw = False
+            dirty = self.background.get_rect()
+        else:
+            self.sprites.clear(self.screen, self.background)
+            self.shadows.draw(self.screen)
+            dirty = self.sprites.draw(self.screen)
+        pygame.display.update(dirty)
+
 
     def main(self):
         while not self.game_over:
             self.pc.control()
-            dirty = self.level.draw(self.screen)
-            pygame.display.update(dirty)
+            self.draw()
+            self.sprites.update()
+            self.shadows.update()
             self.clock.tick(15)
             for event in pygame.event.get():
                 if event.type == pg.QUIT or (