X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=erdslangetjie%2Flevel.py;h=450ce8c6152b4e2f9932b3eac0c3d8667b8ce632;hb=bbbabb3f3e92e6862140ab0ab6417bcd65707134;hp=3214cf665fb7ec3f7e718015de74cbf887297f96;hpb=881e6bbd13737bcdd759d5297a41983b7f608d37;p=erdslangetjie.git diff --git a/erdslangetjie/level.py b/erdslangetjie/level.py index 3214cf6..450ce8c 100644 --- a/erdslangetjie/level.py +++ b/erdslangetjie/level.py @@ -1,21 +1,21 @@ # The level object -from data import load_image +import os +from data import load_image, load, filepath class Level(object): - def __init__(self): + def __init__(self, levelfile): self.data = [] self.exit_pos = [] self.enter_pos = None self.tiles = [] - - def load(self, levelfile): - """Load the level""" - self.data = [] - for line in levelfile.readlines(): - self.data.append(list(line)) + # Because of how kivy's coordinate system works, + # we reverse the lines so things match up between + # the file and the display (top of file == top of display) + for line in reversed(levelfile.readlines()): + self.data.append(list(line.strip('\n'))) def load_tiles(self): """Load the list of tiles for the level""" @@ -42,5 +42,50 @@ class Level(object): def get_tiles(self): return self.tiles + def get_size(self): + return len(self.tiles[0]), len(self.tiles) + def at_exit(self, pos): return pos in self.exit_pos + + def blocked(self, pos): + if pos[0] < 0: + return True + if pos[1] < 0: + return True + try: + tile = self.data[pos[1]][pos[0]] + except IndexError: + return True + if tile == '.': + return True + return False + + +class LevelList(object): + + LEVELS = 'level_list' + + def __init__(self): + self.levels = [] + 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_file.close() + else: + print 'Level list includes non-existant level %s' % line + level_list.close() + self._cur_level = 0 + + def get_current_level(self): + if self._cur_level < len(self.levels): + return self.levels[self._cur_level] + else: + return None + + def advance_to_next_level(self): + self._cur_level += 1 + return self.get_current_level()