def test_should_prevent_movement_outside_of_map_bounds(self): p = interfaces.Position(1, 1) o = tiles.Wall(p) assert_is(self.map.add(o), None) for (x, y) in ( (-1, 0), (9, 9), (-1, 9), ): m = interfaces.Position(x, y) assert_raises(errors.InvalidMoveError, self.map.move, o, m)
def load(self, mapa): try: for item in self.walls: item.tile_.remove_node() for item in self.doors: item.tile_.remove_node() for item in self.empty: item.tile_.remove_node() for item in self.enemies: item.tile_.remove_node() self.walls.clear() self.doors.clear() self.empty.clear() self.enemies.clear() self.start.tile_.remove_node() self.end.remove_node() self.player.tile_.remove_node() self.start = None self.end = None self.player = None except AttributeError: pass mapa = Level(mapa) y = 0 for line in mapa.board: x = 0 for _tile in line: if _tile == "*": tile_ = tiles.Wall(x, y) self.walls.append(tile_) if _tile == " ": tile_ = tiles.Empty(x, y) self.empty.append(tile_) if _tile == "%": tile_ = tiles.Door(x, y, 2) self.doors.append(tile_) if _tile == "X": self.end = Entity(model='cube', color=color.green, position=(x, -y, 0), scale=(1,1,1)) if _tile == "P": self.start = tiles.Start(x, y) if _tile == "@": enemy = entities.Enemy(x, y) self.enemies.append(enemy) tile_ = tiles.Empty(x, y) self.empty.append(tile_) x+=1 y+=1 self.player = entities.Player(self.start.x, self.start.y)
def test_should_add_obj_to_correct_layer_if_not_given(self): p = interfaces.Position(1, 1) for (o, layer) in ( (tiles.Wall(p), tiles.Tile), (tiles.EvidencePanel(p), tiles.Tile), (monsters.Dalek(p), monsters.Monster), (monsters.StaticCamera(p), monsters.Monster), (items.HandTeleport(p, 1.0), items.Item), (items.RemoteControl(p, 1.0), items.Item), ): assert_is(self.map.add(o), None) assert_is(self.map.find_at_pos(p, layer), o) assert_is(o.map, self.map) assert_is(self.map.remove(o), None) assert_is(self.map.find_at_pos(p, layer), None)
def test_should_remove_obj_from_given_layer(self): # almost exactly the same p = interfaces.Position(1, 1) for (o, layer) in ( (tiles.Wall(p), tiles.Tile), (tiles.EvidencePanel(p), tiles.Tile), (monsters.Dalek(p), monsters.Monster), (monsters.StaticCamera(p), monsters.Monster), (items.HandTeleport(p, 1.0), items.Item), (items.RemoteControl(p, 1.0), items.Item), ): assert_is(self.map.add(o, layer), None) assert_is(o.map, self.map) assert_is(self.map.find_at_pos(p, layer), o) assert_is(self.map.remove(o, layer), None) assert_is(o.pos, None) assert_is(self.map.find_at_pos(p, layer), None)
def test_should_use_layer_parameter_if_given(self): p = interfaces.Position(1, 1) p1 = p + (1, 1) for (o, layer) in ( (tiles.Wall(p), tiles.Tile), (tiles.EvidencePanel(p), tiles.Tile), (monsters.Dalek(p), monsters.Monster), (monsters.StaticCamera(p), monsters.Monster), (items.HandTeleport(p, 1.0), items.Item), (items.RemoteControl(p, 1.0), items.Item), ): assert_is(self.map.add(o, layer), None) assert_equal(self.map.move(o, p1, layer), 0.0) assert_is(o.map, self.map) assert_is(self.map.find_at_pos(p, layer), None) assert_is(self.map.find_at_pos(p1, layer), o) assert_equal(o.pos, p1) assert_is(self.map.remove(o, layer), None) assert_is(self.map.find_at_pos(p, layer), None)
def read(self): file = open(self.mapDir + self.maps[self.map]) map = file.read() lines = map.split("\n") self.tileList = [] x = 0 y = 0 for y in range(len(lines)): nodes = lines[y].split("|") for x in range(len(nodes)): if nodes[x] == "wall" or nodes[x] == "w": self.node = tiles.Wall(x * 20, y * 20) self.tileList.append(self.node) elif nodes[x] == "player" or nodes[x] == "p": self.node = tiles.Player(x * 20, y * 20) self.tileList.append(self.node) elif nodes[x] == "steroid" or nodes[x] == "s": self.node = tiles.Steroid(x * 20, y * 20) self.tileList.append(self.node) elif nodes[x] == "oestrogen" or nodes[x] == "o": self.node = tiles.Oestrogen(x * 20, y * 20) self.tileList.append(self.node)
def setupMap(): #Return a new map of wall tiles return [[tiles.Wall() for y in range(mapy)] for x in range(mapx)]
def test_should_prevent_movement_when_not_added_to_map(self): p = interfaces.Position(1, 1) o = tiles.Wall(p) assert_raises(AssertionError, self.map.move, o, p + (1, 1))
def test_should_prevent_removal_of_obj_not_on_map(self): p = interfaces.Position(1, 1) o = tiles.Wall(p) assert_raises(AssertionError, self.map.remove, o)