private void removeRowsAndDrop(List<Integer> rowsToRemove) {
        // NB: iterating from bottom to top
        for (int y = TANK_HEIGHT - 1; y >= 0; y--) {
            if (rowsToRemove.contains(y)) {
                for (int x = 0; x < TANK_WIDTH; x++) {
                    tank[x][y] = null;
                }
            } else {
                int numberOfRowsRemovedBelow = getNumberOfRowsRemovedBelow(y, rowsToRemove);
                if (numberOfRowsRemovedBelow > 0) {
                    for (int x = 0; x < TANK_WIDTH; x++) {
                        // move this row down by a number of rows equal to those removed below it
                        tank[x][y + numberOfRowsRemovedBelow] = tank[x][y];
                        tank[x][y] = null;
                    }
                }
            }
        }
    }