changeset 11:e7c684cfe063

Make map block the player
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 26 Feb 2012 16:40:41 +0100
parents 1706e5370f76
children 88cb0ac8e488
files mhrok.py
diffstat 1 files changed, 11 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mhrok.py	Sun Feb 26 16:01:19 2012 +0100
+++ b/mhrok.py	Sun Feb 26 16:40:41 2012 +0100
@@ -35,7 +35,7 @@
         self.image = self.frames[0]
         self.rect = self.image.get_rect()
         self.frame = 0
-        self.rect.move_ip(6 + 20 * x, 12 * y)
+        self.rect.move_ip(4 + 20 * x, 12 * y)
         self.depth = self.rect.bottom
 
     def update(self):
@@ -95,14 +95,15 @@
 
 class Player(object):
     def control(self, level):
+        mx, my = self.mob.rect.topleft
         keys = pygame.key.get_pressed()
-        if keys[pg.K_UP]:
+        if keys[pg.K_UP] and level[(mx - 4 + 5) / 20, (my + 6 - 3) / 12]:
             self.mob.animation = 2
-        elif keys[pg.K_LEFT]:
+        elif keys[pg.K_LEFT] and level[(mx - 9 + 5) / 20, (my + 6) / 12]:
             self.mob.animation = 1
-        elif keys[pg.K_DOWN]:
+        elif keys[pg.K_DOWN] and level[(mx - 4 + 5) / 20, (my + 9 + 3) / 12]:
             self.mob.animation = 0
-        elif keys[pg.K_RIGHT]:
+        elif keys[pg.K_RIGHT] and level[(mx + 1 + 10) / 20, (my + 6) / 12]:
             self.mob.animation = 3
         else:
             self.mob.animation = 4 + self.mob.animation % 4
@@ -115,10 +116,6 @@
         return sorted(self.spritedict.keys(),
                       key=lambda sprite: getattr(sprite, "depth", 0))
 
-    def move(self, (dx, dy)):
-        for sprite in self.sprites():
-            sprite.rect.move_ip(dx, dy)
-
 
 class Level(object):
     def __init__(self, (width, height)):
@@ -136,6 +133,7 @@
         self.map[0][1] = 2
         self.map[5][5] = 3
         self.map[6][7] = 4
+        self.map[-1][-1] = 1
 
         self.mobs[2, 3] = Bat
         self.mobs[4, 2] = Chest
@@ -149,15 +147,15 @@
             return None
 
     def render_background(self, tiles):
-        background = pygame.Surface((self.width * 20 + 28, self.height * 12 + 36))
-        background.fill((24, 16, 16))
+        background = pygame.Surface((self.width * 20 + 20, self.height * 12 + 20))
+        background.fill((16, 8, 0))
         blood = tiles[21].copy()
         blood.set_alpha(220)
         blood2 = tiles[22].copy()
         blood2.set_alpha(220)
         for y, row in enumerate(self.map):
             for x, square in enumerate(row):
-                pos = x * 20 + 6, y * 12
+                pos = x * 20 + 4, y * 12
                 if square == 1:
                     background.blit(tiles[23], pos)
                 elif square == 2:
@@ -230,7 +228,7 @@
         self.game_over = False
 
         self.pc = Player()
-        self.level = Level((30, 36))
+        self.level = Level((31, 38))
         self.display.render_level(self.level, self.pc)
 
     def main(self):