exit_points = 0
for line in self._data:
if ENTRY in line:
- entry_points += 1
+ entry_points += line.count(ENTRY)
if EXIT in line:
- exit_points += 1
+ exit_points += line.count(EXIT)
if entry_points == 0:
raise RuntimeError('No entry point')
if entry_points > 1:
return self._data[pos[1]][pos[0]]
def set_tile_type(self, pos, new_type):
- print '\n'.join([''.join(x) for x in self._data])
self._data[pos[1]][pos[0]] = new_type
- print
- print '\n'.join([''.join(x) for x in self._data])
- print pos, self._in_limits(pos)
new_tile = self._get_tile_image(pos, new_type)
self._tiles[pos[1]][pos[0]] = new_tile
self._changed.append((pos, new_tile))
if not self._in_limits(new_pos):
continue
tile = self._data[new_pos[1]][new_pos[0]]
- print new_pos, tile
new_tile = self._get_tile_image(new_pos, tile)
self._tiles[new_pos[1]][new_pos[0]] = new_tile
self._changed.append((new_pos, new_tile))
def at_exit(self, pos):
return pos in self.exit_pos
+ def get_level_data(self):
+ return '\n'.join(reversed([''.join(x) for x in self._data]))
+
def _get_wall_tile(self, pos):
# Is the neighbour in this direction also a wall?
x, y = pos
self._data[pos[1]][pos[0]]
except IndexError:
return False
- print pos, self._data[pos[1]][pos[0]]
return True
def blocked(self, pos):
def __init__(self):
self.levels = []
+ self.errors = []
level_list = load(self.LEVELS)
for line in level_list:
line = line.strip()
if os.path.exists(filepath(line)):
level_file = load(line)
- self.levels.append(Level(level_file))
+ level = Level(level_file)
level_file.close()
+ try:
+ level.validate()
+ self.levels.append(level)
+ except RuntimeError as err:
+ self.errors.append(
+ 'Invalid level %s in level_list: %s' % (line, err))
else:
- print 'Level list includes non-existant level %s' % line
+ self.errors.append(
+ 'Level list includes non-existant level %s' % line)
level_list.close()
self._cur_level = 0
else:
return None
+ def get_errors(self):
+ return self.errors
+
def advance_to_next_level(self):
self._cur_level += 1
return self.get_current_level()