Is something like this what you're asking for?
Block blocks[][];
void removeBlock(int x, int y)
{
while (y < blocks[x].length - 1)
blocks[x][y] = blocks[x][y+1];
if (y < blocks[x].length)
blocks[x][y] = generateNewBlock();
}
If you're asking about the animations for moving the blocks down, then you probably will want to keep both a logic position (the x,y coordinates above) and a visual position, that interpolates smoothly as the block falls.
You can use simple linear interpolation pos = pos1 * t + pos0 * (1-t) where t will go from 0 to 1, to move from pos0 to pos1. Preferably though is to have some kind of animation, for instance, you could use acceleration to speed up the blocks as they fall, then have them bounce once:
gravity = 10
velocity.y -= gravity * dt
position.y += velocity.y * dt
if (position.y < destination.y)
{
if (!bounced)
{
velocity.y *= -0.1;
bounced = true;
}
else
{
position.y = destination.y;
}
}