Code:

#include "graphics.h"
#include "math.h"
#include "conio.h"
#include "dos.h"
#define pi 3.141592

typedef struct R2 {
   int x,y;
};

typedef struct R3{
   float   x,y,z;
};

typedef R3  VatThe[39];
float xd,yd,zd;

void ToaDoDiemVatThe(float k,float l,float i,VatThe p) {
   p[1].x=0;      ;p[1].y=0      ;p[1].z=0-2*i;
   p[2].x=0      ;p[2].y=60-k  ;p[2].z=20-i;
   p[3].x=-30+k  ;p[3].y=50-k  ;p[3].z=20-i;
   p[4].x=-50+k  ;p[4].y=30-k  ;p[4].z=20-i;
   p[5].x=-60+k  ;p[5].y=0      ;p[5].z=20-i;
   p[6].x=-50+k  ;p[6].y=-30+k  ;p[6].z=20-i;
   p[7].x=-30+k  ;p[7].y=-50+k  ;p[7].z=20-i;
   p[8].x=0      ;p[8].y=-60+k  ;p[8].z=20-i;
   p[9].x=30-k    ;p[9].y=-50+k  ;p[9].z=20-i;
   p[10].x=50-k  ;p[10].y=-30+k ;p[10].z=20-i;
   p[11].x=60-k  ;p[11].y=0    ;p[11].z=20-i;
   p[12].x=50-k  ;p[12].y=30-k  ;p[12].z=20-i;
   p[13].x=30-k  ;p[13].y=50-k  ;p[13].z=20-i;
   p[14].x=0      ;p[14].y=60-l  ;p[14].z=50;

   p[15].x=-30+l  ;p[15].y=50-l  ;p[15].z=50;
   p[16].x=-50+l  ;p[16].y=30-l  ;p[16].z=50;
   p[17].x=-60+l  ;p[17].y=0    ;p[17].z=50;
   p[18].x=-50+l  ;p[18].y=-30+l ;p[18].z=50;
   p[19].x=-30+l  ;p[19].y=-50+l ;p[19].z=50;
   p[20].x=0      ;p[20].y=-60+l ;p[20].z=50;
   p[21].x=30-l  ;p[21].y=-50+l ;p[21].z=50;
   p[22].x=50-l  ;p[22].y=-30+l ;p[22].z=50;
   p[23].x=60-l  ;p[23].y=0    ;p[23].z=50;
   p[24].x=50-l  ;p[24].y=30-l  ;p[24].z=50;
   p[25].x=30-l  ;p[25].y=50-l  ;p[25].z=50;

   p[26].x=0      ;p[26].y=60-k  ;p[26].z=80+i;
   p[27].x=-30+k  ;p[27].y=50-k  ;p[27].z=80+i;
   p[28].x=-50+k  ;p[28].y=30-k  ;p[28].z=80+i;
   p[29].x=-60+k  ;p[29].y=0    ;p[29].z=80+i;
   p[30].x=-50+k  ;p[30].y=-30+k ;p[30].z=80+i;
   p[31].x=-30+k  ;p[31].y=-50+k ;p[31].z=80+i;
   p[32].x=0      ;p[32].y=-60+k ;p[32].z=80+i;
   p[33].x=30-k  ;p[33].y=-50+k ;p[33].z=80+i;
   p[34].x=50-k  ;p[34].y=-30+k ;p[34].z=80+i;
   p[35].x=60-k  ;p[35].y=0    ;p[35].z=80+i;
   p[36].x=50-k  ;p[36].y=30-k  ;p[36].z=80+i;
   p[37].x=30-k  ;p[37].y=50-k  ;p[37].z=80+i;
   p[38].x=0      ;p[38].y=0    ;p[38].z=100+2*i;
}

void PhepChieu() {
   xd=0.4;
   yd=-0.894;
   zd=0.224;
}

void BienDoi(VatThe p,int x,int y){
   for(int i=1;i<=38;i++) {
       p[i].x=p[i].y*(xd/yd) +p[i].x+x;
       p[i].z=p[i].y*(zd/yd) +p[i].z+y;
   }
}

void PhepXoay(int l,VatThe p, VatThe v) {
   float k;
   k=l*pi/180;
   for(int i=1; i<=38; i++) {
        v[i].x = cos(k)*p[i].x +sin(k)*p[i].y;
        v[i].y = -sin(k)*p[i].x +cos(k)*p[i].y;
        v[i].z = p[i].z;
   }
}

void VeVatThe(VatThe v) {
   for(int i=2; i<=13; i++) {
      line(v[1].x,v[1].z,v[i].x,v[i].z);
      line(v[38].x,v[38].z,v[i+24].x,v[i+24].z);
      line(v[i].x,v[i].z,v[i+12].x,v[i+12].z);
      line(v[i+12].x,v[i+12].z,v[i+24].x,v[i+24].z);
      if (i<=12) {
         line(v[i].x,v[i].z,v[i+1].x,v[i+1].z);
         line(v[i+12].x,v[i+12].z,v[i+1+12].x,v[i+1+12].z);
         line(v[i+24].x,v[i+24].z,v[i+1+24].x,v[i+1+24].z);
      }
   }
   line(v[2].x,v[2].z,v[13].x,v[13].z);
   line(v[2+12].x,v[2+12].z,v[13+12].x,v[13+12].z);
   line(v[2+24].x,v[2+24].z,v[13+24].x,v[13+24].z);
}
/*********** Mot so ham su ly chuot ***********/
void MouseReset() {
   asm {
      mov ax,0h
      int 33h
   }
}

void MouseShow() {
   asm {
      mov ah,0
      mov al,1
      int 33h
   }
}

void MouseHide() {
   asm {
      mov ah,0
      mov al,2
      int 33h
   }
}

char LeftMouseOnDown() {
      char k=0;
   asm {
         mov ah,0
         mov al,3
      int 33h
         and bx,0000000000000001b
         mov k,bl
      }
      return k;
   }

char RightMouseOnDown() {
      char k=0;
   asm {
         mov ah,0
         mov al,3
      int 33h
         shr bx,1
         and bx,0000000000000001b
      mov k,bl
      }
   return k;
}

R2 GetMousePostion() {
   R2 p;
   int x,y;
   asm {
         mov ah,3
         int 33h
      mov x,cx
         mov y,dx
   }
      p.x = x;
   p.y = y;
      return p;
}
/****************************************/
void main() {
   clrscr();
   int gm,gd= DETECT;
   R2 getMouse,getMouseSave;
   char Thoat = 0, TaoVat = 0, KhoiTao =1, Tao =0, Xoay = 0;
   char ThoatXoay=0;
   initgraph(&gd,&gm,"c:\\tc\\bgi");
   VatThe Vat,Vat1;
   PhepChieu();
   setfillstyle(6,2);

   bar3d(5,5,75,25,2,2);
   outtextxy(10,10,"Tao Vat");

   bar3d(5,30,75,50,2,2);
   outtextxy(10,35,"Dung");

   bar3d(5,55,75,75,2,2);
   outtextxy(10,60,"Xoay Vat");

   bar3d(5,80,75,100,2,2);
   outtextxy(10,85,"Khoi Tao");

   bar3d(5,105,75,125,2,2);
   outtextxy(10,110,"Ket Thuc");

   MouseReset();
   MouseShow();

   while( Thoat == 0) {
      getMouse = GetMousePostion();
      //ket thuc
      if ((LeftMouseOnDown()!=0)&& ((getMouse.x >5)
      &&(getMouse.x<75)&&(getMouse.y>105)&&(getMouse.y<125)))
         Thoat = 1;
      //khoi tao
      if ((LeftMouseOnDown()!=0)&&(KhoiTao==0)&&(Thoat==0)&&(Tao==1)&&((getMouse.x>5)
      &&(getMouse.x<75)&&(getMouse.y>80)&&(getMouse.y<100)))
      {
         setcolor(0);
         VeVatThe(Vat1);
         setcolor(15);
         outtextxy(10,10,"Tao Vat");
         outtextxy(10,35,"Dung");
         outtextxy(10,85,"Khoi Tao");
         outtextxy(10,110,"Ket Thuc");
         ThoatXoay = 0;
         TaoVat = 0;
         KhoiTao = 1;
         Tao =0;
         Xoay = 0;
      }
      //Khoi tao chon vat
      if ((LeftMouseOnDown()!=0)&&(Thoat==0)&&(TaoVat==0)&&
      (KhoiTao==1)&&((getMouse.x>5)
      &&(getMouse.x<75)&&(getMouse.y>5)&&(getMouse.y<125)))
      {
         setcolor(14);
         outtextxy(10,10,"Tao Vat");
         TaoVat = 1;
         KhoiTao =0;
      }
      //Tao Vat khi click chuot
      if ((LeftMouseOnDown()!=0)&&(TaoVat==1)&&(Tao==0)&&(Xoay ==0)&& !((getMouse.x >0)
      &&(getMouse.x<75)&&(getMouse.y>0)&&(getMouse.y<125))) {
         ToaDoDiemVatThe(0,-20,10,Vat);
         BienDoi(Vat,getMouse.x,getMouse.y+40);
         getMouseSave.x=getMouse.x;
         getMouseSave.y=getMouse.y+40;
         setcolor(RED);
         VeVatThe(Vat);
         Tao = 1;
      }
      /*if ((LeftMouseOnDown()!=0)&&(Xoay==0)&&(TaoVat==1)&&(Tao==1)&&((getMouse.x >0)
      &&(getMouse.x<75)&&(getMouse.y>55)&&(getMouse.y<75)))
      {
         Xoay = 1;
      } */
      if ((LeftMouseOnDown()!=0)&&(Xoay==0)&&(TaoVat==1)&&(Tao==1)&&
      ((getMouse.x >0)&&(getMouse.x<75)&&(getMouse.y>55)&&(getMouse.y<75)))
      {
         setcolor(14);
         outtextxy(10,60,"Xoay Vat");
         outtextxy(10,85,"Khoi Tao");
         int arg =0;
         ToaDoDiemVatThe(0,-20,10,Vat);
         ToaDoDiemVatThe(0,-20,10,Vat1);
         BienDoi(Vat1,getMouseSave.x,getMouseSave.y);

         while(ThoatXoay==0) {
            getMouse = GetMousePostion();
            if ((LeftMouseOnDown()!=0)&& (getMouse.x >5)
            &&(getMouse.x<75)&&(getMouse.y>30)&&(getMouse.y<50)) {
               ThoatXoay =1;
            }
            if ((LeftMouseOnDown()!=0)&& ((getMouse.x >5)
            &&(getMouse.x<75)&&(getMouse.y>105)&&(getMouse.y<125)))
            {
               Thoat = 1;
               ThoatXoay =1;
            }
            if(RightMouseOnDown()!=0) ThoatXoay =1;
            setcolor(0);
            VeVatThe(Vat1);
            arg++;
            PhepXoay(arg,Vat,Vat1);
            BienDoi(Vat1,getMouseSave.x,getMouseSave.y);
            setcolor(RED);
            VeVatThe(Vat1);
            delay(20);
            if (arg == 360) arg = 0;
         }
         TaoVat = 0;
      }
   }
   closegraph();
   MouseHide();
}