Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Tháp Hà Nội viết bằng C ở Graphic mode

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Mặc định Tháp Hà Nội viết bằng C ở Graphic mode

    hôm nay cúp điện, buồn buồn viết chơi ^^
    demo với đĩa từ 1 -> 5, nếu số đĩa lớn hơn vẫn chạy đc. nhưng rất lâu mới kết thúc :P

    C Code:
    1. #include<graphics.h>
    2. #include<math.h>
    3. #include<dos.h>
    4. #include<alloc.h>
    5. #include<conio.h>
    6. #include<iostream.h>
    7.  
    8. #define DL 1 // delay
    9.  
    10. typedef struct Thap
    11. {
    12.     int x1,y1,x2,y2,x,y;
    13. };
    14.  
    15. class ThapHN
    16. {
    17.     private:
    18.         Thap *t;
    19.         int max,x,y;
    20.     public:
    21.  
    22.     ThapHN(int x,int y);
    23.  
    24.     void init(int solg);
    25.     void initvoid(int solg);
    26.  
    27.     friend void drawmove(ThapHN &a,ThapHN &b);
    28.  
    29.     friend void move(int solg,ThapHN &a,ThapHN &b,ThapHN &c)
    30.     {
    31.         if(solg==1)
    32.             drawmove(a,c);
    33.         else
    34.         {
    35.             move(solg-1,a,c,b);
    36.             move(1,a,b,c);
    37.             move(solg-1,b,a,c);
    38.         }
    39.     }
    40. };
    41.  
    42. ThapHN::ThapHN(int x,int y)
    43. {
    44.     t=NULL;
    45.     this->x=x;
    46.     this->y=y;
    47.     max=0;
    48. }
    49.  
    50. void ThapHN::init(int solg)
    51. {
    52.     line(x,y,x,80);
    53.     t=new Thap[solg];
    54.     for(int i=0;i<solg;++i)
    55.     {
    56.         t[i].x=x;t[i].y=y;
    57.         t[i].x1=x-100+i*20;
    58.         t[i].x2=x+100-i*20;
    59.         t[i].y1=y-20-20*i;
    60.         if(i==0)t[i].y2=y;
    61.         else t[i].y2=t[i-1].y1;
    62.  
    63.         setfillstyle(1,i+1);
    64.         bar(t[i].x1,t[i].y1,t[i].x2,t[i].y2);
    65.     }
    66.     max=solg-1;
    67. }
    68.  
    69. void ThapHN::initvoid(int solg)
    70. {
    71.     line(x,y,x,80);
    72.     t=new Thap[solg];
    73.     for(int i=0;i<solg;++i)
    74.     {
    75.         t[i].x1=x-100+i*20;
    76.         t[i].x2=x+100-i*20;
    77.         t[i].y1=y-20-20*i;
    78.         if(i==0)t[i].y2=y;
    79.         else t[i].y2=t[i-1].y1;
    80.     }
    81.     max=-1;
    82. }
    83.  
    84. void drawmove(ThapHN &a,ThapHN &b)
    85. {
    86.     int ox,oy,ox1,oy1,ox2,oy2;
    87.     char *size;
    88.     char *cot;
    89.     unsigned n=imagesize(a.t[a.max].x1,a.t[a.max].y1,a.t[a.max].x2,a.t[a.max].y2);
    90.     size=(char*)malloc(n);
    91.     getimage(a.t[a.max].x1,a.t[a.max].y1,a.t[a.max].x2,a.t[a.max].y2,size);
    92.     n=imagesize(a.x,80,a.x,a.y);
    93.     cot=(char*)malloc(n);
    94.     getimage(a.x,80,a.x,a.y,cot);
    95.  
    96.     ox=a.t[a.max].x;oy=a.t[a.max].y;
    97.     ox1=a.t[a.max].x1;ox2=a.t[a.max].x2;
    98.     oy1=a.t[a.max].y1;oy2=a.t[a.max].y2;
    99.  
    100.     while(a.t[a.max].y2>60)
    101.     {
    102.         putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    103.         a.t[a.max].y--;
    104.         a.t[a.max].y1--;
    105.         a.t[a.max].y2--;
    106.         putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    107.         putimage(a.x,80,cot,OR_PUT);
    108.         delay(DL);
    109.     }
    110.  
    111.  
    112.     if(a.t[a.max].x<b.x)
    113.         while(a.t[a.max].x!=b.x)
    114.         {
    115.             putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    116.             a.t[a.max].x2++;
    117.             a.t[a.max].x1++;
    118.             a.t[a.max].x++;
    119.             putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    120.             delay(DL);
    121.         }
    122.     else
    123.         while(a.t[a.max].x!=b.x)
    124.         {
    125.             putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    126.             a.t[a.max].x2--;
    127.             a.t[a.max].x1--;
    128.             a.t[a.max].x--;
    129.             putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    130.             delay(DL);
    131.         }
    132.  
    133.     b.max++;
    134.     while(a.t[a.max].y2!=b.t[b.max].y2)
    135.     {
    136.         putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    137.         a.t[a.max].y1++;
    138.         a.t[a.max].y2++;
    139.         a.t[a.max].y++;
    140.         putimage(a.t[a.max].x1,a.t[a.max].y1,size,XOR_PUT);
    141.         delay(DL);
    142.     }
    143.     b.t[b.max].x1=a.t[a.max].x1;b.t[b.max].y1=a.t[a.max].y1;
    144.     b.t[b.max].x2=a.t[a.max].x2;b.t[b.max].y2=a.t[a.max].y2;
    145.     b.t[b.max].x=a.t[a.max].x;b.t[b.max].y=a.t[a.max].y;
    146.  
    147.     a.t[a.max].x1=ox1;a.t[a.max].x2=ox2;
    148.     a.t[a.max].y1=oy1;a.t[a.max].y2=oy2;
    149.     a.t[a.max].x=ox;a.t[a.max].y=oy;
    150.     a.max--;
    151.  
    152. }
    153.  
    154.  
    155.  
    156. void main()
    157. {
    158.     clrscr();
    159.     int gm,gd=0;
    160.     int n;
    161.     cout<<"^.^ Demo chuong trinh thap Ha Noi ^.^";
    162.     while(1)
    163.     {
    164.         cout<<"\n\nNhap so dia (nho hon 6,lon hon 0): ";
    165.         cin>>n;
    166.         if(n<6&&n>0)break;
    167.         else cout<<"\nNhap sai";
    168.     }
    169.     initgraph(&gd,&gm,"D:\\Borlandc\\bgi");
    170.     ThapHN a(100,300),b(100+200,300),c(100+400,300);
    171.     a.init(n);
    172.     b.initvoid(n);
    173.     c.initvoid(n);
    174.     cout<<"Press any key to continue...";
    175.     getch();
    176.     move(n,a,b,c);
    177.     cout<<"Xong !"<<" So lan chuyen: "<<pow(2,n)-1;
    178.     getch();
    179.     closegraph();
    180. }

  2. #2
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    cái này chắc chỉ BC mới chạy được,mình dùng TC 3.0 không chạy được
    initgraph(&gd,&gm,"D:\\Borlandc\\bgi");
    hàm này nghĩa là gì thế cậu

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    336

    hàm đó khởi tạo chế độ đồ họa trong DOS , gd, gm mình để nó mặc định, còn D:\\borlandc\\bgi là đường dẫn đến thư mục chứa các file .bgi (graphic driver)
    Turbo C thì cậu thử set lại đường dẫn thử xem...
    code ra gió bão

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    vngameday.com
    Bài viết
    62

    cái này chắc chỉ BC mới chạy được,mình dùng TC 3.0 không chạy được
    Bạn bật TC lên vào options --> Linker --> kích chọn libraries --> tích chọn vào Graphics Library --> OK

    chúc bạn thành công !
    vngameday.com - khi niềm đam mê luôn rực cháy. Rất mong nhận được sự đóng góp từ các bạn...

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    2

    BT về nhà đây,sao trông nó kinh thế

  6. #6
    Ngày gia nhập
    04 2007
    Bài viết
    22

    Mặc định Tháp Hà Nội viết bằng C ở Graphic mode

    Nhập n=5 nó ko chuyển hết đã tự tắt màn hình rồi.

  7. #7
    Ngày gia nhập
    12 2011
    Bài viết
    3

    bạn ơi bài toán này bạn có code nào làm = thuật toán A* share cho mình với ! mình đang làm bài này = A* mà thấy rắc rối quá !tkS nha !

Các đề tài tương tự

  1. Trả lời: 1
    Bài viết cuối: 13-07-2014, 08:06 AM
  2. Con trỏ trên C Viết hoa chuỗi bằng con trỏ báo lỗi only allowed in C99 mode
    Gửi bởi ToNy_ trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 23-12-2011, 10:58 PM
  3. lỗi graphic
    Gửi bởi nganvht1986 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 27-05-2008, 05:56 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn