changeset 15:2fd709e21c45

Randomly place the player
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Wed, 29 Feb 2012 21:52:19 +0100
parents 1f9de3322be5
children 1053363c0f22
files mhrok.py
diffstat 1 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mhrok.py	Wed Feb 29 21:34:30 2012 +0100
+++ b/mhrok.py	Wed Feb 29 21:52:19 2012 +0100
@@ -96,6 +96,13 @@
 
 
 class Player(object):
+    def place(self, (x, y)):
+        self.pos = x, y
+
+    def make_mob(self, tiles):
+        self.mob = PlayerMob(tiles, self.pos)
+        return self.mob
+
     def control(self, level):
         mx, my = self.mob.rect.topleft
         x, y = (mx+1)/20, (my+6)/12
@@ -121,7 +128,8 @@
 
 
 class Level(object):
-    def __init__(self):
+    def __init__(self, pc):
+        self.pc = pc
         self.mobs = {}
         self.width = 31
         self.height = 38
@@ -166,6 +174,9 @@
                         [Bat, Chest, Teddybear, Skeleton])
         self[r(x, x+w), r(y, y+h)] = 5
 
+        (x, y), (w, h) = random.choice(rooms)
+        self.pc.place((r(x, x+w), r(y, y+h)))
+
 
     def __getitem__(self, (x, y)):
         if self.width > x >= 0 and self.height > y >= 0:
@@ -234,15 +245,14 @@
 
         return background
 
-    def render_sprites(self, tiles, pc):
+    def render_sprites(self, tiles):
         sprites = SortedUpdates()
         shadows = pygame.sprite.RenderUpdates()
         for (x, y), Mob in self.mobs.iteritems():
             mob = Mob(tiles, (x, y))
             sprites.add(mob)
             shadows.add(Shadow(tiles, mob))
-        mob = PlayerMob(tiles, (0, 0))
-        pc.mob = mob
+        mob = self.pc.make_mob(tiles)
         sprites.add(mob)
         shadows.add(Shadow(tiles, mob))
         return sprites, shadows
@@ -257,8 +267,8 @@
         self.tiles = load_tiles('mhrok.png', 32, 32)
         self.background = pygame.Surface(self.screen.get_size())
 
-    def render_level(self, level, pc):
-        self.sprites, self.shadows = level.render_sprites(self.tiles, pc)
+    def render_level(self, level):
+        self.sprites, self.shadows = level.render_sprites(self.tiles)
         self.background.blit(level.render_background(self.tiles), (0, 0))
 
     def draw(self):
@@ -286,8 +296,8 @@
         self.game_over = False
 
         self.pc = Player()
-        self.level = Level()
-        self.display.render_level(self.level, self.pc)
+        self.level = Level(self.pc)
+        self.display.render_level(self.level)
 
     def main(self):
         while not self.game_over: