# HG changeset patch # User Jeremy Thurgood # Date 1315759401 -7200 # Node ID cced0ddda33f19b3ef9cd3ba89808f059dea3767 # Parent 30c3bbaf7a28af421a6263840de2f5e84ad9bb32 More level validation. diff -r 30c3bbaf7a28 -r cced0ddda33f mamba/level.py --- 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()