changeset 10:1706e5370f76

Switch to map-based level
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 26 Feb 2012 16:01:19 +0100
parents f1b43f6480c5
children e7c684cfe063
files mhrok.png mhrok.py
diffstat 2 files changed, 52 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
Binary file mhrok.png has changed
--- a/mhrok.py	Sun Feb 26 14:21:36 2012 +0100
+++ b/mhrok.py	Sun Feb 26 16:01:19 2012 +0100
@@ -1,6 +1,13 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
+
+import pkgutil
+try:
+    import cStringIO as StringIO
+except ImportError:
+    import StringIO
+
 import pygame
 from pygame import locals as pg
 
@@ -119,39 +126,58 @@
         self.width = width
         self.height = height
 
+        self.map = [[0] * width for y in xrange(height)]
+        for y in range(2, 10):
+            for x in range(2, 10):
+                self.map[y][x] = 1
+        self.map[2][1] = 2
+        self.map[1][1] = 2
+        self.map[0][0] = 2
+        self.map[0][1] = 2
+        self.map[5][5] = 3
+        self.map[6][7] = 4
+
         self.mobs[2, 3] = Bat
         self.mobs[4, 2] = Chest
         self.mobs[6, 3] = Skeleton
-        self.mobs[9, 10] = Teddybear
+        self.mobs[9, 7] = Teddybear
 
+    def __getitem__(self, (x, y)):
+        try:
+            return self.map[y][x]
+        except IndexError:
+            return None
 
     def render_background(self, tiles):
         background = pygame.Surface((self.width * 20 + 28, self.height * 12 + 36))
+        background.fill((24, 16, 16))
         blood = tiles[21].copy()
         blood.set_alpha(220)
         blood2 = tiles[22].copy()
         blood2.set_alpha(220)
-        for y in range(self.height):
-            for x in range(self.width):
-                background.blit(tiles[23], (x * 20 + 6, y * 12))
-                if (9*x + 5*y + 2) % (y+3) == 3:
-                    background.blit(blood, (x * 20 + 6, y * 12))
-                if (13*x + 5*y + 2) % (y+4) == 2:
-                    background.blit(blood2, (x * 20 + 6, y * 12))
-        for x in range(self.width):
-            if x != 3:
-                background.blit(tiles[4], (x * 20 + 6, 0))
-                background.blit(tiles[14], (x * 20 + 6, self.height * 12 - 12))
-            else:
-                background.blit(tiles[24], (x * 20 + 6, 0))
-                background.blit(tiles[34], (x * 20 + 6, self.height * 12 - 12))
-        for y in range(self.height):
-            if y != 3:
-                background.blit(tiles[9], (6, y * 12))
-                background.blit(tiles[19], (self.width * 20 - 14, y * 12))
-            else:
-                background.blit(tiles[29], (6, y * 12))
-                background.blit(tiles[39], (self.width * 20 - 14, y * 12))
+        for y, row in enumerate(self.map):
+            for x, square in enumerate(row):
+                pos = x * 20 + 6, y * 12
+                if square == 1:
+                    background.blit(tiles[23], pos)
+                elif square == 2:
+                    background.blit(tiles[33], pos)
+                elif square == 3:
+                    background.blit(tiles[23], pos)
+                    background.blit(blood, pos)
+                elif square == 4:
+                    background.blit(tiles[23], pos)
+                    background.blit(blood2, pos)
+                if square:
+                    if not self[x - 1, y]:
+                        background.blit(tiles[9], pos)
+                    if not self[x + 1, y]:
+                        background.blit(tiles[19], pos)
+                    if not self[x, y - 1]:
+                        background.blit(tiles[4], pos)
+                    if not self[x, y + 1]:
+                        background.blit(tiles[14], pos)
+
         return background
 
     def render_sprites(self, tiles, pc):
@@ -179,8 +205,7 @@
 
     def render_level(self, level, pc):
         self.sprites, self.shadows = level.render_sprites(self.tiles, pc)
-        self.background.blit(level.render_background(self.tiles), (160, 140))
-        self.sprites.move((160, 140))
+        self.background.blit(level.render_background(self.tiles), (0, 0))
 
     def draw(self):
         if self.first_draw:
@@ -205,7 +230,7 @@
         self.game_over = False
 
         self.pc = Player()
-        self.level = Level((15, 14))
+        self.level = Level((30, 36))
         self.display.render_level(self.level, self.pc)
 
     def main(self):
@@ -221,7 +246,8 @@
 
 
 def load_tiles(filename, width, height):
-    image = pygame.image.load(filename).convert()
+    f = StringIO.StringIO(pkgutil.get_data('mhrok', filename))
+    image = pygame.image.load(f, filename).convert()
     image_width, image_height = image.get_size()
     tiles = []
     for x in range(image_width/width):