X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=erdslangetjie%2Flevel.py;h=645a62f7678aca49f89f85a024dbaf4cc9ecd327;hb=3a3faf0ebde7ba88de6400c2c0ea257ae36a9c6b;hp=a2c2a2dadc1b8044676574d8c60d9134e84b6b5a;hpb=bbbe943d8b35fd351814aaef8f73a171c0f600b3;p=erdslangetjie.git diff --git a/erdslangetjie/level.py b/erdslangetjie/level.py index a2c2a2d..645a62f 100644 --- a/erdslangetjie/level.py +++ b/erdslangetjie/level.py @@ -7,16 +7,24 @@ class Level(object): def __init__(self): 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 get_tiles(self): - """Return a list of tiles for the level""" - tiles = [] + def load_tiles(self): + """Load the list of tiles for the level""" + self.tiles = [] + self.exit_pos = [] + self.enter_pos = None for j, line in enumerate(self.data): tile_line = [] for i, c in enumerate(line): @@ -25,6 +33,30 @@ class Level(object): elif c == '.': tile_line.append(load_image('tiles/wall.bmp')) elif c == 'E' or c == 'X': + if c == 'E': + if self.enter_pos: + raise RuntimeError('Multiple entry points') + self.enter_pos = (i, j) + else: + self.exit_pos.append((i, j)) tile_line.append(load_image('tiles/door.bmp')) - tiles.append(tile_line) - return tiles + self.tiles.append(tile_line) + + def get_tiles(self): + return 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