public boolean placeUpStairs() {
        boolean success = true;
        Room upStairsRoom = mapRooms.get(0);
        Tile upStairsTile;

        if (upStairsRoom.getFreeTiles().size() == 0) {
            ArrayList<Tile> edgeTilesCopy = (ArrayList<Tile>) upStairsRoom.getEdgeTiles().clone();
            upStairsTile = (Tile) chooseRandom(edgeTilesCopy);
            int x = upStairsTile.getX();
            int y = upStairsTile.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(upStairsTile);
                if (edgeTilesCopy.size() > 0) {
                    upStairsTile = (Tile) chooseRandom(edgeTilesCopy);
                    x = upStairsTile.getX();
                    y = upStairsTile.getY();
                } else {
                    success = false;
                }
            }

            if (success) {
                upStairsRoom.removeEdgeTile(upStairsTile.getX(), upStairsTile.getY());
                upStairsRoom.setTile(upStairsTile.getX(), upStairsTile.getY(), TILE_UPSTAIRS);
                setTile(upStairsTile.getX(), upStairsTile.getY(), TILE_UPSTAIRS);
            }
        } else {
            upStairsTile = (Tile) chooseRandom(upStairsRoom.getFreeTiles());
            upStairsRoom.removeFreeTile(upStairsTile.getX(), upStairsTile.getY());
            upStairsRoom.setTile(upStairsTile.getX(), upStairsTile.getY(), TILE_UPSTAIRS);
            setTile(upStairsTile.getX(), upStairsTile.getY(), TILE_UPSTAIRS);
        }

        return success;
    }