def test_bsp(): """ commented out statements work in libtcod-cffi """ bsp = libtcodpy.bsp_new_with_size(0, 0, 64, 64) repr(bsp) # test __repr__ on leaf libtcodpy.bsp_resize(bsp, 0, 0, 32, 32) assert bsp != None # test getter/setters bsp.x = bsp.x bsp.y = bsp.y bsp.w = bsp.w bsp.h = bsp.h bsp.position = bsp.position bsp.horizontal = bsp.horizontal bsp.level = bsp.level # cover functions on leaf #self.assertFalse(libtcodpy.bsp_left(bsp)) #self.assertFalse(libtcodpy.bsp_right(bsp)) #self.assertFalse(libtcodpy.bsp_father(bsp)) assert libtcodpy.bsp_is_leaf(bsp) assert libtcodpy.bsp_contains(bsp, 1, 1) #self.assertFalse(libtcodpy.bsp_contains(bsp, -1, -1)) #self.assertEqual(libtcodpy.bsp_find_node(bsp, 1, 1), bsp) #self.assertFalse(libtcodpy.bsp_find_node(bsp, -1, -1)) libtcodpy.bsp_split_once(bsp, False, 4) repr(bsp) # test __repr__ with parent libtcodpy.bsp_split_once(bsp, True, 4) repr(bsp) # cover functions on parent assert libtcodpy.bsp_left(bsp) assert libtcodpy.bsp_right(bsp) #self.assertFalse(libtcodpy.bsp_father(bsp)) assert not libtcodpy.bsp_is_leaf(bsp) #self.assertEqual(libtcodpy.bsp_father(libtcodpy.bsp_left(bsp)), bsp) #self.assertEqual(libtcodpy.bsp_father(libtcodpy.bsp_right(bsp)), bsp) libtcodpy.bsp_split_recursive(bsp, None, 4, 2, 2, 1.0, 1.0) # cover bsp_traverse def traverse(node, user_data): return True libtcodpy.bsp_traverse_pre_order(bsp, traverse) libtcodpy.bsp_traverse_in_order(bsp, traverse) libtcodpy.bsp_traverse_post_order(bsp, traverse) libtcodpy.bsp_traverse_level_order(bsp, traverse) libtcodpy.bsp_traverse_inverted_level_order(bsp, traverse) # test __repr__ on deleted node son = libtcodpy.bsp_left(bsp) libtcodpy.bsp_remove_sons(bsp) repr(son) libtcodpy.bsp_delete(bsp)
def make_bsp(self): bsp_rooms = [] bsp = libtcod.bsp_new_with_size(0, 0, self.MAP_WIDTH, self.MAP_HEIGHT) libtcod.bsp_split_recursive(bsp, 0, self.DEPTH, self.MIN_SIZE + 1, self.MIN_SIZE + 1, 1.5, 1.5) libtcod.bsp_traverse_inverted_level_order(bsp, self.traverse_node) self.game = None
def make_bsp(self, depth, min_size, player, entities, max_monsters_per_room, max_items_per_room): global rooms rooms = [] bsp = tcod.bsp_new_with_size(0, 0, self.width, self.height) tcod.bsp_split_recursive(bsp, 0, depth, min_size + 1, min_size + 1, 1.5, 1.5) tcod.bsp_traverse_inverted_level_order( bsp, functools.partial(self.traverse_node, entities=entities, mmpr=max_monsters_per_room, mipr=max_items_per_room, min_size=min_size)) player_room = choice(rooms) rooms.remove(player_room) player_room_x, player_room_y = player_room.center() player.x = player_room_x player.y = player_room_y
def make_map(self, player, entities, color, max_rooms=None, room_min_size=None, room_max_size=None, map_width=None, map_height=None): '''rooms = [] num_rooms = 0 center_of_last_room_x = None center_of_last_room_y = None for r in range(max_rooms): w = randint(room_min_size, room_max_size) h = randint(room_min_size, room_max_size) x = randint(0, map_width - w - 1) y = randint(0, map_height - h - 1) new_room = Rect(x, y, w, h) for other_room in rooms: if new_room.interset(other_room): break else: self.create_room(new_room) (new_x, new_y) = new_room.center() center_of_last_room_x = new_x center_of_last_room_y = new_y if num_rooms == 0: player.x = new_x player.y = new_y else: (prev_x, prev_y) = rooms[num_rooms - 1].center() if randint(0, 1) == 1: self.create_h_tunnel(prev_x, new_x, prev_y) self.create_v_tunnel(prev_y, new_y, prev_x) else: self.create_v_tunnel(prev_y, new_y, prev_x) self.create_h_tunnel(prev_x, new_x, prev_y) self.place_entities(new_room, entities) rooms.append(new_room) num_rooms += 1 stairs_component = Stairs(self.dungeon_level + 1) down_stairs = Entity(center_of_last_room_x, center_of_last_room_y, '>', libtcod.white, 'Stairs', render_order=RenderOrder.STAIRS, stairs=stairs_component) entities.append(down_stairs) ''' bsp = libtcod.bsp_new_with_size(0, 0, self.width, self.height) libtcod.bsp_split_recursive(bsp, 0, BspConstants.DEPTH, BspConstants.MIN_SIZE + 1, BspConstants.MIN_SIZE + 1, 2, 2) libtcod.bsp_traverse_inverted_level_order(bsp, self.travers_node) stairs_location = choice(self.bsp_rooms) x = stairs_location[0] y = stairs_location[1] stairs_component = Stairs(self.dungeon_level + 1) self.bsp_rooms.remove(stairs_location) stairs = Entity(x, y, '<', libtcod.white, 'Stairs', render_order=RenderOrder.STAIRS, stairs=stairs_component) entities.append(stairs) player_room = choice(self.bsp_rooms) self.bsp_rooms.remove(player_room) player.x = player_room[0] player.y = player_room[1] for room in self.bsp_rooms: new_room = Rect(room[0], room[1], 2, 2) self.place_entities(new_room, entities, color)