changeset 10:89bcca88e444

robots
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Wed, 13 Mar 2013 17:17:24 +0100
parents 3094d51c1dc7
children ca3c3f3d40e5
files fhrl/__main__.py fhrl/display.py fhrl/level.py fhrl/mobs.py fhrl/mobs2.png fhrl/rocks.png
diffstat 6 files changed, 52 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/fhrl/__main__.py	Wed Mar 13 13:40:50 2013 +0100
+++ b/fhrl/__main__.py	Wed Mar 13 17:17:24 2013 +0100
@@ -5,15 +5,13 @@
 
 from fhrl.display import Display
 from fhrl.level import Level
-from fhrl.resources import Resources
 
 
 class Game(object):
     def __init__(self):
         self.margin = 64
-        self.resources = Resources()
         self.display = Display()
-        self.level = Level((32, 32), self.resources)
+        self.level = Level((32, 32))
         self.display.load_level(self.level)
 
     def run(self):
--- a/fhrl/display.py	Wed Mar 13 13:40:50 2013 +0100
+++ b/fhrl/display.py	Wed Mar 13 17:17:24 2013 +0100
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import pygame
+from fhrl.resources import Resources
 
 
 class SortedUpdates(pygame.sprite.RenderUpdates):
@@ -16,20 +17,25 @@
         self.x, self.y = 0, 0
         self.screen = pygame.display.set_mode((self.width, self.height))
         self.clock = pygame.time.Clock()
+        self.resources = Resources()
         self.animations = []
 
     def load_level(self, level):
         self.background = pygame.Surface(
             (level.width * 48 - 48, level.height * 32 - 32)
         )
-        level.render(self.background)
+        self.render_level(self.background, level)
         self.sprites = SortedUpdates()
+        level.hero.set_image(self.resources.mobs[0])
         self.sprites.add(level.hero)
         for m in level.monsters:
+            m.set_image(self.resources.mobs[m.kind])
             self.sprites.add(m)
         for i in level.items:
+            i.set_image(self.resources.items[i.kind])
             self.sprites.add(i)
         for s in level.stuff:
+            s.set_image(self.resources.stuff[s.kind])
             self.sprites.add(s)
 
     def _scroll_anim(self, dx, dy):
@@ -98,3 +104,20 @@
             if self.animations:
                 self.update()
 
+    def render_level(self, surf, level):
+        for y, row in enumerate(level.grid):
+            for x, f in enumerate(row):
+                surf.blit(self.resources.floor[f], (x * 48 - 24, y * 32))
+        nrows = iter(level.grid)
+        nrows.next()
+        for y, (row, nrow) in enumerate(zip(level.grid, nrows)):
+            for x, ts in enumerate(zip(row, row[1:], nrow, nrow[1:])):
+                surf.blit(
+                    self.resources.walls[
+                        sum((not t) * 2**i for i, t in enumerate(ts))
+                    ],
+                    (x * 48, y * 32)
+                )
+
+
+
--- a/fhrl/level.py	Wed Mar 13 13:40:50 2013 +0100
+++ b/fhrl/level.py	Wed Mar 13 17:17:24 2013 +0100
@@ -6,8 +6,7 @@
 
 
 class Level(object):
-    def __init__(self, (width, height), resources):
-        self.resources = resources
+    def __init__(self, (width, height)):
         self.width = width
         self.height = height
         self.grid = [
@@ -68,17 +67,17 @@
             if f
         ]
         random.shuffle(self.free)
-        self.hero = Hero(self.resources.mobs[0], self.free.pop())
+        self.hero = Hero(0, self.free.pop())
         self.monsters = [
-            Mob(self.resources.mobs[random.randrange(1, 3)], self.free.pop())
+            Mob(random.randrange(1, 4), self.free.pop())
             for i in xrange(20)
         ]
         self.items = [
-            Item(self.resources.items[random.randrange(6)], self.free.pop())
+            Item(random.randrange(6), self.free.pop())
             for i in xrange(20)
         ]
         self.stuff = [
-            Stuff(self.resources.stuff[random.randrange(4)], self.free.pop())
+            Stuff(random.randrange(4), self.free.pop())
             for i in xrange(20)
         ]
         x, y = self.free.pop()
@@ -115,19 +114,3 @@
             self.grid[sy + h - 1][x] = v
         return sx, sy, w, h
 
-    def render(self, surf):
-        for y, row in enumerate(self.grid):
-            for x, f in enumerate(row):
-                surf.blit(self.resources.floor[f], (x * 48 - 24, y * 32))
-        nrows = iter(self.grid)
-        nrows.next()
-        for y, (row, nrow) in enumerate(zip(self.grid, nrows)):
-            for x, ts in enumerate(zip(row, row[1:], nrow, nrow[1:])):
-                surf.blit(
-                    self.resources.walls[
-                        sum((not t) * 2**i for i, t in enumerate(ts))
-                    ],
-                    (x * 48, y * 32)
-                )
-
-
--- a/fhrl/mobs.py	Wed Mar 13 13:40:50 2013 +0100
+++ b/fhrl/mobs.py	Wed Mar 13 17:17:24 2013 +0100
@@ -20,31 +20,40 @@
     """Raised when you try to walk into a monster."""
 
 
-class Item(pygame.sprite.DirtySprite):
-    def __init__(self, image, (x, y)):
-        super(Item, self).__init__()
+class Sprite(pygame.sprite.DirtySprite):
+    def __init__(self):
+        super(Sprite, self).__init__()
+        self.rect = pygame.Rect(0, 0, 1, 1)
+
+    def set_image(self, image):
+        pos = self.rect.topleft
         self.image = image
         self.rect = self.image.get_rect()
-        self.rect.topleft = x * 48 - 24, y * 32 - 12
-        self.x, self.y = x, y
+        self.rect.move_ip(pos)
 
 
-class Stuff(pygame.sprite.DirtySprite):
-    def __init__(self, image, (x, y)):
+class Item(Sprite):
+    def __init__(self, kind, (x, y)):
+        super(Item, self).__init__()
+        self.rect.topleft = x * 48 - 24, y * 32 - 12
+        self.x, self.y = x, y
+        self.kind = kind
+
+
+class Stuff(Sprite):
+    def __init__(self, kind, (x, y)):
         super(Stuff, self).__init__()
-        self.image = image
-        self.rect = self.image.get_rect()
         self.rect.topleft = x * 48 - 24, y * 32 - 24
         self.x, self.y = x, y
+        self.kind = kind
 
 
-class Mob(pygame.sprite.DirtySprite):
-    def __init__(self, image, (x, y)):
+class Mob(Sprite):
+    def __init__(self, kind, (x, y)):
         super(Mob, self).__init__()
-        self.image = image
-        self.rect = self.image.get_rect()
         self.rect.topleft = x * 48 - 24, y * 32 - 33
         self.x, self.y = x, y
+        self.kind = kind
 
     def _walk_anim(self, d):
         for frame in xrange(8):
Binary file fhrl/mobs2.png has changed
Binary file fhrl/rocks.png has changed