changeset 6:3a6e7753aa28

add box, fix sprite placement
author Radomir Dopieralski <moindev@sheep.art.pl>
date Sat, 23 Aug 2008 23:08:24 +0200
parents 22fd63214aed
children 49756204d145
files box.png corridor.png player.png qq.py shadow.png skeleton.png
diffstat 6 files changed, 59 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
Binary file box.png has changed
Binary file corridor.png has changed
Binary file player.png has changed
--- a/qq.py	Sat Aug 23 21:18:41 2008 +0200
+++ b/qq.py	Sat Aug 23 23:08:24 2008 +0200
@@ -85,20 +85,20 @@
         self.animation = self.stand_animation()
 
     def _get_pos(self):
-        return (self.rect.midbottom[0]-12)/24, (self.rect.midbottom[1]+12)/16
+        return (self.rect.midbottom[0]-12)/24, (self.rect.midbottom[1]-16)/16
     def _set_pos(self, pos):
-        self.rect.midbottom = pos[0]*24+12, pos[1]*16+12
-        self.depth = pos[1]
+        self.rect.midbottom = pos[0]*24+12, pos[1]*16+16
+        self.depth = self.rect.midbottom[1]
     pos = property(_get_pos, _set_pos)
 
     def move(self, dx, dy):
         self.rect.move_ip(dx, dy)
-        self.depth = self.pos[1]
+        self.depth = self.rect.midbottom[1]
 
     def stand_animation(self):
         while True:
-            for frame in range(2):
-                self.image = self.frames[frame][0]
+            for frame in self.frames:
+                self.image = frame[0]
                 yield None
                 yield None
                 yield None
@@ -109,25 +109,26 @@
 
 class Level:
     def __init__(self):
+        self.items = {}
         self.map = [
             "xxxxxxxxxxxxxxx",
-            "x.x.x.x.xxx...x",
-            "xx.x.x.x.x....x",
-            "x.x.x.x.xxx...x",
-            "xx.x.x.x.xxxxxx",
-            "x.x.x.x.xxx...x",
-            "xx.x.x.x.xx...x",
-            "x.x.x.x.x.....x",
-            "xx.x.x.x.xx...x",
-            "x.x.x.x.xxx...x",
-            "xx.x.x.x.xxxxxx",
-            "x.x.x.x.xxx...x",
-            "xx.x.x.x.x....x",
-            "x.x.x.x.xxx...x",
+            "x.......x.x.x.x",
+            "x......x.x.x.xx",
+            "x...@.......x.x",
+            "x......S...x.xx",
+            "x...........x.x",
+            "xx.x.x.x...x.xx",
+            "x.x.x.x.....x.x",
+            "xx.x.b.x......x",
+            "x..........S..x",
+            "xx.xx.xxx.....x",
+            "x..xx.xxx...x.x",
+            "xx.xx.xxx....xx",
+            "x.....xxx...x.x",
             "xxxxxxxxxxxxxxx",
         ]
-        tile_image = pygame.image.load("corridor.png").convert()
-        tile_width, tile_height = tile_image.get_size()
+        tile_width, tile_height = 24, 16
+        tiles = load_tiles("corridor.png", tile_width, tile_height)
         width = len(self.map[0])
         height = len(self.map)
         self.image = pygame.Surface((width*tile_width, height*tile_height))
@@ -136,7 +137,15 @@
             x = 0
             for tile in line:
                 if self.map[y][x] != 'x':
-                    self.image.blit(tile_image, (x*tile_width, y*tile_height))
+                    self.image.blit(tiles[0][0], (x*tile_width, y*tile_height))
+                elif y > 1 and self.map[y-1][x] != 'x':
+                    self.image.blit(tiles[0][1], (x*tile_width, y*tile_height))
+                if self.map[y][x] == 'S':
+                    self.items[(x, y)] = Skeleton
+                if self.map[y][x] == '@':
+                    self.items[(x, y)] = Player
+                if self.map[y][x] == 'b':
+                    self.items[(x, y)] = Crate
                 x += 1
             y += 1
 
@@ -147,20 +156,29 @@
 class Skeleton(Sprite):
     frames = load_tiles("skeleton.png")
 
-    def __init__(self):
+    def __init__(self, pos=(0, 0)):
         Sprite.__init__(self)
-        self.pos = (160, 64) # XXX Temporary, will be set on creation later
+        self.pos = pos
+
+
+class Crate(Sprite):
+    frames = load_tiles("box.png")
+
+    def __init__(self, pos=(0, 0)):
+        Sprite.__init__(self)
+        self.pos = pos
 
 
 class Player(Sprite):
     frames = load_tiles("player.png")
 
-    def __init__(self):
+    def __init__(self, pos=(1, 1)):
         Sprite.__init__(self)
         self.direction = 2
         self.animation = None
         self.image = self.frames[self.direction][0]
-        self.pos = (0, 0) # XXX Temporary, will be set on creation later
+        self.pos = pos
+        self.rect.move_ip((0, 1))
 
     def walk_animation(self):
         for frame in range(4):
@@ -185,24 +203,29 @@
         self.screen = pygame.display.get_surface()
         self.pressed_key = None
         self.game_over = False
+        self.use_level(Level())
+
+    def use_level(self, level):
         self.shadows = pygame.sprite.RenderUpdates()
         self.sprites = SortedUpdates()
-        self.level = Level()
+        self.level = level
+        for pos, kind in self.level.items.iteritems():
+            item = kind(pos)
+            if kind == Player:
+                self.player = item
+            self.sprites.add(item)
+            self.shadows.add(Shadow(item))
         self.background = self.level.image.copy()
-        self.player = Player()
-        self.sprites.add(self.player)
-        self.shadows.add(Shadow(self.player))
-        skeleton = Skeleton()
-        self.sprites.add(skeleton)
-        self.shadows.add(Shadow(skeleton))
 
     def control(self):
         keys = pygame.key.get_pressed()
         def pressed(key):
             return self.pressed_key == key or keys[key]
-        def walk(direction):
-            self.player.direction = direction
-            self.player.animation = self.player.walk_animation()
+        def walk(d):
+            x, y = self.player.pos
+            self.player.direction = d
+            if self.level.map[y+DY[d]][x+DX[d]] != 'x':
+                self.player.animation = self.player.walk_animation()
         if pressed(K_UP):
             walk(0)
         elif pressed(K_DOWN):
Binary file shadow.png has changed
Binary file skeleton.png has changed