C, 287 characters
#define F(r)for(r=0;r<98;r++)
#define C(y,s)for(k=0;s[k];k++)b[49-i][w+k+y]=s[k];i++;
char k,i,j,w,t,b[98][99];main(c,v)char**v;{F(i)F(j)b[i][j]=32;
for(j=0;j0)t=i,i=0;for(;i
(this character count excludes two newlines)
This runs as a command line program, like
./cubes 1 2 3 4 5 0 1 3 2 -1 -10
You can try running it here: http://codepad.org/tu4HDqSy (This version is altered because codepad.org doesn't allow command line arguments.)
A handy tip for un-golfing is to run it through cpp
and then indent
:
char k , i, j, w, t, b[98][99];
main(c, v)
char **v;
{
for (i = 0; i < 98; i++)
for (j = 0; j < 98; j++)
b[i][j] = 32;
for (j = 0; j < c; j++) {
i = 2 * atoi(v[j]);
t = 0;
if (i > 0)
t = i, i = 0;
for (; i < t; i -= 2) {
for (k = 0; "|___|/"[k]; k++)
b[49 - i][w + k + 0] = "|___|/"[k];
i++;
for (k = 0; "| | |"[k]; k++)
b[49 - i][w + k + 0] = "| | |"[k];
i++;
for (k = 0; "/__ /|"[k]; k++)
b[49 - i][w + k + 1] = "/__ /|"[k];
i++;
for (k = 0; "__"[k]; k++)
b[49 - i][w + k + 3] = "__"[k];
i++;
} w += 4;
} for (i = 0; i < 98; i++)
puts(b[i]);
}