changeset 11:a6f9541f58b1

test for large sprites: a house
author Radomir Dopieralski <moindev@sheep.art.pl>
date Wed, 27 Aug 2008 21:29:47 +0200
parents b87fd9e8c365
children 57b9256be7b8
files ground.png house.png level.map qq.py
diffstat 4 files changed, 14 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
Binary file ground.png has changed
Binary file house.png has changed
--- a/level.map	Wed Aug 27 19:56:05 2008 +0200
+++ b/level.map	Wed Aug 27 21:29:47 2008 +0200
@@ -1,14 +1,15 @@
 [level]
-tileset = dungeon.png
+tileset = ground.png
 \#: wall
 \.: floor
 \@: player
 \S: skeleton
 \b: crate
 \>: stairs
+\h: house
 map:    ###.###########
         #.......#.#.#.#
-        #.>....#.#.#.##
+        #.>....#.#.h.##
         #...@.......#.#
         #......s...#.##
         #..............
--- a/qq.py	Wed Aug 27 19:56:05 2008 +0200
+++ b/qq.py	Wed Aug 27 21:29:47 2008 +0200
@@ -80,11 +80,12 @@
 
 
 class Sprite(pygame.sprite.Sprite):
-    def __init__(self):
+    def __init__(self, pos=(0, 0)):
         pygame.sprite.Sprite.__init__(self)
         self.image = self.frames[0][0]
         self.rect = self.image.get_rect()
         self.animation = self.stand_animation()
+        self.pos = pos
 
     def _get_pos(self):
         return (self.rect.midbottom[0]-12)/24, (self.rect.midbottom[1]-16)/16
@@ -111,17 +112,13 @@
 class Skeleton(Sprite):
     frames = load_tiles("skeleton.png")
 
-    def __init__(self, pos=(0, 0)):
-        Sprite.__init__(self)
-        self.pos = pos
-
 
 class Crate(Sprite):
     frames = load_tiles("box.png")
 
-    def __init__(self, pos=(0, 0)):
-        Sprite.__init__(self)
-        self.pos = pos
+
+class House(Sprite):
+    frames = load_tiles("house.png")
 
 
 class Player(Sprite):
@@ -160,6 +157,7 @@
         'floor': 1,
         'skeleton': Skeleton,
         'crate': Crate,
+        'house': House,
         'stairs': 4,
     }
     def __init__(self, filename="level.map"):
@@ -170,7 +168,8 @@
         self.map = parser.get("level", "map").split("\n")
         for option in parser.options("level"):
             if option.startswith('\\'):
-                self.key[option[1]] = parser.get("level", option).strip()
+                value = parser.get("level", option).strip()
+                self.key[option[1]] = self.item_names[value]
         tile_width, tile_height = 24, 16
         self.tiles = load_tiles(parser.get("level", "tileset"),
                                 tile_width, tile_height)
@@ -182,7 +181,7 @@
         for line in self.map:
             x = 0
             for c in line:
-                tile = self.item_names[self.key[c]]
+                tile = self.key[c]
                 if tile:
                     # floor
                     if isinstance(tile, int):
@@ -228,7 +227,7 @@
 
     def __call__(self, x, y):
         try:
-            return self.item_names[self.key[self.map[y][x]]]
+            return self.key[self.map[y][x]]
         except IndexError:
             return None
 
@@ -285,8 +284,8 @@
         self.overlays.draw(self.screen)
         pygame.display.flip()
         while not self.game_over:
+            # Don't clear shadows and overlays.
             self.sprites.clear(self.screen, self.background)
-            self.shadows.clear(self.screen, self.background)
             self.sprites.update()
             if self.player.animation is None:
                 self.control()