changeset 4:2f5c8e3409ca

map and digging
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 26 Apr 2014 14:52:05 +0200
parents 1d6f23ce6acf
children 022ecd420594
files undermine/display.py undermine/game.py undermine/undermine.png
diffstat 3 files changed, 36 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/undermine/display.py	Sat Apr 26 14:03:04 2014 +0200
+++ b/undermine/display.py	Sat Apr 26 14:52:05 2014 +0200
@@ -15,8 +15,9 @@
         self.screen.blit(self.background, (0, 0))
         pygame.display.update()
 
-    def update(self):
+    def update(self, dirty=None):
+        dirty = dirty or []
         self.sprites.clear(self.screen, self.background)
         self.sprites.update()
-        dirty = self.sprites.draw(self.screen)
+        dirty.extend(self.sprites.draw(self.screen))
         pygame.display.update(dirty)
--- a/undermine/game.py	Sat Apr 26 14:03:04 2014 +0200
+++ b/undermine/game.py	Sat Apr 26 14:52:05 2014 +0200
@@ -10,32 +10,58 @@
 
 class Game(object):
     def __init__(self, fps=24):
+        map_size = (12, 12)
+        self.map = [[0] * map_size[0] for y in range(map_size[1])]
         self.fps = fps
-        self.display = undermine.display.Display()
+        self.display = undermine.display.Display(
+            (len(self.map[0]) * 64, len(self.map) * 64))
         self.clock = pygame.time.Clock()
         self.images = undermine.resources.load_atlas('undermine.png', 64)
         self.hero = undermine.sprites.Hero(self.images[0])
         self.display.sprites.add(self.hero)
+        self.hero_pos = 0, 0
+
+    def move(self, dx, dy):
+        x, y = self.hero_pos
+        if not (0 <= x + dx <= len(self.map[0]) and
+                0 <= y +dy < len(self.map)):
+            return
+        self.hero.animations.append(self.hero.move_anim(dx, dy))
+        self.hero_pos = x + dx, y + dy
+        self.dig(self.hero_pos)
+
+    def dig(self, (x, y), tile=1):
+        self.map[y][x] = tile
+        self.dirty.append(pygame.Rect(x * 64, y * 64, 64, 64))
+        self.display.screen.blit(self.images[tile + 8], (x * 64, y * 64))
+        self.display.background.blit(self.images[tile + 8], (x * 64, y * 64))
+
+    def draw_map(self):
+        for y, row in enumerate(self.map):
+            for x, tile in enumerate(row):
+                self.display.background.blit(self.images[tile + 8],
+                                             (x * 64, y * 64))
 
     def run(self):
+        self.draw_map()
         self.display.refresh()
         while True:
             self.clock.tick(self.fps)
             self.tick()
-            self.display.update()
 
     def tick(self):
+        self.dirty = []
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 raise SystemExit
         if self.hero.ready:
             keys = pygame.key.get_pressed()
             if keys[pygame.K_RIGHT]:
-                self.hero.move(1, 0)
+                self.move(1, 0)
             elif keys[pygame.K_DOWN]:
-                self.hero.move(0, 1)
+                self.move(0, 1)
             elif keys[pygame.K_LEFT]:
-                self.hero.move(-1, 0)
+                self.move(-1, 0)
             elif keys[pygame.K_UP]:
-                self.hero.move(0, -1)
-
+                self.move(0, -1)
+        self.display.update(self.dirty)
Binary file undermine/undermine.png has changed