changeset 8:5c4c86502a2f

Separate display class
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Tue, 12 Mar 2013 14:50:30 +0100
parents 006f78dd763f
children 3094d51c1dc7
files fhrl/__main__.py fhrl/rocks.png
diffstat 2 files changed, 51 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/fhrl/__main__.py	Tue Mar 12 12:29:08 2013 +0100
+++ b/fhrl/__main__.py	Tue Mar 12 14:50:30 2013 +0100
@@ -110,9 +110,11 @@
             for i in xrange(20)
         ]
         self.items = [
-            Item(self.resources.items[0], self.free.pop())
+            Item(self.resources.items[random.randrange(4)], self.free.pop())
             for i in xrange(20)
         ]
+        x, y = self.free.pop()
+        self.grid[y][x] = 5
 
 
     def __iter__(self):
@@ -200,28 +202,25 @@
         return False
 
 
-class Game(object):
+class Display(object):
     def __init__(self):
         self.width = 480
         self.height = 480
-        self.margin = 64
         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.level = Level((32, 32), self.resources)
+        self.animations = []
+
+    def load_level(self, level):
         self.background = pygame.Surface(
-            (self.level.width * 48 - 48, self.level.height * 32 - 32)
+            (level.width * 48 - 48, level.height * 32 - 32)
         )
-        self.level.render(self.background)
-        self.init_sprites()
-
-    def init_sprites(self):
+        level.render(self.background)
         self.sprites = SortedUpdates()
-        self.sprites.add(self.level.hero)
-        for m in self.level.monsters:
+        self.sprites.add(level.hero)
+        for m in level.monsters:
             self.sprites.add(m)
-        for i in self.level.items:
+        for i in level.items:
             self.sprites.add(i)
 
     def _scroll_anim(self, dx, dy):
@@ -270,43 +269,54 @@
         self.sprites.draw(self.screen)
         pygame.display.flip()
 
+    def play_animations(self):
+        while self.animations:
+            cont = []
+            for anim in self.animations:
+                try:
+                    anim.next()
+                except StopIteration:
+                    pass
+                else:
+                    cont.append(anim)
+            self.animations = cont
+            self.update()
+
+class Game(object):
+    def __init__(self):
+        self.margin = 64
+        self.resources = Resources()
+        self.display = Display()
+        self.level = Level((32, 32), self.resources)
+        self.display.load_level(self.level)
+
     def run(self):
-        self.scroll_by(
-            self.level.hero.x * 48 - self.width // 2,
-            self.level.hero.y * 32 - self.height // 2,
+        self.display.scroll_by(
+            self.level.hero.x * 48 - self.display.width // 2,
+            self.level.hero.y * 32 - self.display.height // 2,
             True
         )
-        self.update_all()
+        self.display.update_all()
         while True:
-            self.animations = []
-            while not self.animations:
+            while True:
                 anim = self.level.hero.act(self.level)
                 if anim:
-                    self.animations.append(anim)
-                self.update()
+                    self.display.animations.append(anim)
+                    break
+                self.display.update()
             for m in self.level.monsters:
                 anim = m.act(self.level)
                 if anim:
-                    self.animations.append(anim)
-            if self.level.hero.rect.right > self.width - self.margin:
-                self.scroll_by(48, 0)
-            if self.level.hero.rect.bottom > self.height - self.margin:
-                self.scroll_by(0, 32)
-            if self.level.hero.rect.left < self.margin:
-                self.scroll_by(-48, 0)
-            if self.level.hero.rect.top < self.margin:
-                self.scroll_by(0, -32)
-            while self.animations:
-                cont = []
-                for anim in self.animations:
-                    try:
-                        anim.next()
-                    except StopIteration:
-                        pass
-                    else:
-                        cont.append(anim)
-                self.animations = cont
-                self.update()
+                    self.display.animations.append(anim)
+            if self.level.hero.rect.right > self.display.width - self.margin:
+                self.display.scroll_by(48, 0)
+            elif self.level.hero.rect.left < self.margin:
+                self.display.scroll_by(-48, 0)
+            if self.level.hero.rect.bottom > self.display.height - self.margin:
+                self.display.scroll_by(0, 32)
+            elif self.level.hero.rect.top < self.margin:
+                self.display.scroll_by(0, -32)
+            self.display.play_animations()
 
 pygame.display.init()
 Game().run()
Binary file fhrl/rocks.png has changed