/* CUBE.C *//* Draws 3D cubes */  int x,y,size,shade,bright,r,l,l1,xdif,ydif,i,delay,max;char text[20];main() $(  slow();  printf("\f\t3D CUBES\n\n\n");  printf("<c> change color\n<e> erase\n<s> set cube size\n<esc> clear screen\n");  printf("Press arrow keys to draw cubes.\n");  printf("Use joystick #0 to move the cursor.\n");  printf("\d\d\tPress a key to start.\n");  getkey();  init(); /* initialize */  while(1) $(    if((r=peek(764)) < 0xFF) $(      if(r == 6) up();      else if(r == 7) down();      else if(r == 14) left();      else if(r == 15) right();      else if(r == 28) init(); /* escape key, erase screen */      else $(        r=getkey();        if(r == 'S') setsize();        if(r == 'E') erase();        if(r == 'C') $( /* change the color by one */          shade=(++shade) & 0x0F;          fixcolor();        $)      $)      poke(764,0xFF);    $)    l=locate(x,y);    l1=(++l1) & 3; /* cycle through 0-3 */    color(l1);    plot(x,y);    for(i=1;i<delay;++i); /* delay loop */    color(l);    plot(x,y);    cursor();  $)$)right() $( /* draw a cube to the lower right */  color(1);  for(i=0;i<size;++i) $(    plot(x,y+i);    drawto(x+size,y+i);  $)  color(2);  for(i=1;i<max;++i) $(    plot(x+i,y-i);    drawto(x+i+size,y-i);  $)  color(3);  for(i=1;i<max;++i) $(    plot(x+size+i,y-i);    drawto(x+size+i,y+size-i+1);  $)$)left() $(  color(1);  for(i=0;i<size;++i) $(    plot(x,y+i);    drawto(x+size,y+i);  $)  color(2);  for(i=1;i<max;++i) $(    plot(x-i,y-i);    drawto(x-i+size,y-i);  $)  color(3);  for(i=1;i<max;++i) $(    plot(x-i,y-i);    drawto(x-i,y+size-i+1);  $)$)up() $(  color(1);  for(i=0;i<size;++i) $(    plot(x,y-i);    drawto(x+size,y-i);  $)  color(2);  for(i=1;i<max;++i) $(    plot(x-i,y+i);    drawto(x+size-i,y+i);  $)  color(3);  for(i=1;i<max;++i) $(    plot(x-i,y+i);    drawto(x-i,y-size+i);  $)$)down() $(  color(1);  for(i=0;i<size;++i) $(    plot(x,y-i);    drawto(x+size,y-i);  $)  color(2);  for(i=1;i<max;++i) $(    plot(x+i,y+i);    drawto(x+size+i,y+i);  $)  color(3);  for(i=1;i<max;++i) $(    plot(x+size+i,y+i);    drawto(x+size+i,y-size+i);  $)$)cursor() $( /* determines whether to move the cursor */  int stickval;  stickval=stick(0);  xdif=ydif=0;  if(stickval == 15) return;  switch(stickval) $(    case 14:      ydif=-1;      break;    case 13:      ydif=1;      break;    case 11:      xdif=-1;      break;    case 10:      xdif=-1;      ydif=-1;      break;    case 9:      ydif=1;      xdif=-1;      break;    case 7:      xdif=1;      break;    case 6:      ydif=-1;      xdif=1;      break;    case 5:      xdif=1;      ydif=1;      break;    default:      break;  $)  x=x+xdif;  y=y+ydif;  if(x<0) x=159;  if(x>159) x=0;  if(y<0) y=95;  if(y>95) y=0;$)setsize() $(  graphics(7+32); /* add text without destroying screen */  printf("size? ");  gets(text);  size=atoi(text);  max=(3*size)/5;  graphics(7+16+32); /* restore the full screen */  fixcolor();$)erase() $( /* enter erase mode */  int ersize,i,j;  graphics(7+32); /* open text window */  printf("erase size?");  gets(text);  ersize=atoi(text);  graphics(7+16+32);  fixcolor();  color(0);  poke(764,0xFF);  while(peek(764) == 0xFF) $(    for(i=0;i<ersize-1;++i) $(      for(j=0;j<ersize-1;++j) plot(x+i,y+j);    $)    cursor();    for(i=1;i<delay;++i); /* delay loop */  $)$)init() $( /* initialize */  x=80;  y=45;  delay=50;  graphics(7+16);  size=12;  max=(3*size)/5;  shade=8; /* color */  bright=8;  /* brightness */  fixcolor();$)fixcolor() $( /* set the colors up */  setcolor(0,shade,bright);  setcolor(1,shade,bright-2);  setcolor(2,shade,bright-4);  setcolor(4,0,0);$)