public boolean placeDownStairs() {
        boolean success = true;
        Room downStairsRoom = getDeepestRoom();
        Tile downStairsTile;

        if (downStairsRoom.getFreeTiles().size() == 0) {
            ArrayList<Tile> edgeTilesCopy = (ArrayList<Tile>) downStairsRoom.getEdgeTiles().clone();
            downStairsTile = (Tile) chooseRandom(edgeTilesCopy);
            int x = downStairsTile.getX();
            int y = downStairsTile.getY();

            while (edgeTilesCopy.size() > 0 && (getTile(x + 1, y) == TILE_DOOR || getTile(x - 1, y) == TILE_DOOR || getTile(x, y + 1) == TILE_DOOR || getTile(x, y - 1) == TILE_DOOR)) {
                edgeTilesCopy.remove(downStairsTile);
                if (edgeTilesCopy.size() > 0) {
                    downStairsTile = (Tile) chooseRandom(edgeTilesCopy);
                    x = downStairsTile.getX();
                    y = downStairsTile.getY();
                } else {
                    success = false;
                }
            }

            if (success) {
                downStairsRoom.removeEdgeTile(downStairsTile.getX(), downStairsTile.getY());
                downStairsRoom.setTile(downStairsTile.getX(), downStairsTile.getY(), TILE_DOWNSTAIRS);
                setTile(downStairsTile.getX(), downStairsTile.getY(), TILE_DOWNSTAIRS);
            }
        } else {
            downStairsTile = (Tile) chooseRandom(downStairsRoom.getFreeTiles());
            downStairsRoom.removeFreeTile(downStairsTile.getX(), downStairsTile.getY());
            downStairsRoom.setTile(downStairsTile.getX(), downStairsTile.getY(), TILE_DOWNSTAIRS);
            setTile(downStairsTile.getX(), downStairsTile.getY(), TILE_DOWNSTAIRS);
        }

        return success;
    }