changeset 12:57b9256be7b8

move items to a separate class
author Radomir Dopieralski <moindev@sheep.art.pl>
date Thu, 28 Aug 2008 10:39:40 +0200
parents a6f9541f58b1
children 320ce875b24d
files qq.py
diffstat 1 files changed, 39 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/qq.py	Wed Aug 27 21:29:47 2008 +0200
+++ b/qq.py	Thu Aug 28 10:39:40 2008 +0200
@@ -80,6 +80,8 @@
 
 
 class Sprite(pygame.sprite.Sprite):
+    is_player = False
+
     def __init__(self, pos=(0, 0)):
         pygame.sprite.Sprite.__init__(self)
         self.image = self.frames[0][0]
@@ -108,58 +110,54 @@
     def update(self):
         self.animation.next()
 
+class Items:
+    Wall = 0
+    Floor = 1
+    Stairs = 4
 
-class Skeleton(Sprite):
-    frames = load_tiles("skeleton.png")
+    class Skeleton(Sprite):
+        frames = load_tiles("skeleton.png")
 
 
-class Crate(Sprite):
-    frames = load_tiles("box.png")
+    class Crate(Sprite):
+        frames = load_tiles("box.png")
 
 
-class House(Sprite):
-    frames = load_tiles("house.png")
+    class House(Sprite):
+        frames = load_tiles("house.png")
 
 
-class Player(Sprite):
-    frames = load_tiles("player.png")
+    class Player(Sprite):
+        frames = load_tiles("player.png")
+        is_player = True
 
-    def __init__(self, pos=(1, 1)):
-        Sprite.__init__(self)
-        self.direction = 2
-        self.animation = None
-        self.image = self.frames[self.direction][0]
-        self.pos = pos
-        self.rect.move_ip((0, 1))
+        def __init__(self, pos=(1, 1)):
+            Sprite.__init__(self)
+            self.direction = 2
+            self.animation = None
+            self.image = self.frames[self.direction][0]
+            self.pos = pos
+            self.rect.move_ip((0, 1))
 
-    def walk_animation(self):
-        for frame in range(4):
-            self.image = self.frames[self.direction][frame]
-            yield None
-            self.move(3*DX[self.direction], 2*DY[self.direction])
-            yield None
-            self.move(3*DX[self.direction], 2*DY[self.direction])
+        def walk_animation(self):
+            for frame in range(4):
+                self.image = self.frames[self.direction][frame]
+                yield None
+                self.move(3*DX[self.direction], 2*DY[self.direction])
+                yield None
+                self.move(3*DX[self.direction], 2*DY[self.direction])
 
-    def update(self):
-        if self.animation is None:
-            self.image = self.frames[self.direction][0]
-        else:
-            try:
-                self.animation.next()
-            except StopIteration:
-                self.animation = None
+        def update(self):
+            if self.animation is None:
+                self.image = self.frames[self.direction][0]
+            else:
+                try:
+                    self.animation.next()
+                except StopIteration:
+                    self.animation = None
 
 
 class Level:
-    item_names = {
-        'player': Player,
-        'wall': 0,
-        'floor': 1,
-        'skeleton': Skeleton,
-        'crate': Crate,
-        'house': House,
-        'stairs': 4,
-    }
     def __init__(self, filename="level.map"):
         parser = ConfigParser.ConfigParser()
         parser.read(filename)
@@ -169,7 +167,7 @@
         for option in parser.options("level"):
             if option.startswith('\\'):
                 value = parser.get("level", option).strip()
-                self.key[option[1]] = self.item_names[value]
+                self.key[option[1]] = getattr(Items, value.capitalize())
         tile_width, tile_height = 24, 16
         self.tiles = load_tiles(parser.get("level", "tileset"),
                                 tile_width, tile_height)
@@ -248,7 +246,7 @@
         self.overlays = pygame.sprite.RenderUpdates()
         self.level = level
         for pos, item in level.items.iteritems():
-            if isinstance(item, Player):
+            if item.is_player:
                 self.player = item
             self.sprites.add(item)
             self.shadows.add(Shadow(item))