changeset 84:cced0ddda33f

More level validation.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 11 Sep 2011 18:43:21 +0200
parents 30c3bbaf7a28
children 5dd9d91aa94f
files mamba/level.py
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/level.py	Sun Sep 11 18:40:08 2011 +0200
+++ b/mamba/level.py	Sun Sep 11 18:43:21 2011 +0200
@@ -48,7 +48,10 @@
         self.tiles.update(THING_MAP)
 
     def __getitem__(self, key):
-        tilespec = self.tiles[key]
+        try:
+            tilespec = self.tiles[key]
+        except KeyError:
+            raise InvalidMapError("Unknown tile type: '%s'" % key)
         if not tilespec:
             return None
         return tilespec[0](*tilespec[1:])
@@ -73,7 +76,7 @@
         level_data = load_file('levels/%s.txt' % (self.level_name,))
         tileset_name = level_data.readline().strip()
         self.tileset = Tileset(tileset_name)
-        tiles_ascii = level_data.readlines()
+        tiles_ascii = [line.strip() for line in level_data.readlines()]
         self.setup_tiles(tiles_ascii)
         self.make_background()
 
@@ -81,9 +84,12 @@
         self.sprites = RenderUpdates()
         self.tiles = []
         self.entry = None
+        self.tile_size = (len(tiles_ascii[0]), len(tiles_ascii))
         for y, row in enumerate(tiles_ascii):
+            if len(row) != self.tile_size[0]:
+                raise InvalidMapError("Map not rectangular.")
             tile_row = []
-            for x, tile_char in enumerate(row.strip()):
+            for x, tile_char in enumerate(row):
                 tile = self.tileset.get_tile(tile_char, (x, y), self.sprites)
                 tile_row.append(tile)
                 if isinstance(tile, EntrySprite):
@@ -95,7 +101,7 @@
             raise InvalidMapError("Not enough entry points.")
 
     def get_tile_size(self):
-        return (len(self.tiles[0]), len(self.tiles))
+        return self.tile_size
 
     def get_size(self):
         x, y = self.get_tile_size()