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

Đề tài: Mô phỏng RÒNG RỌC ở Chế độ ĐỒ HỌA, làm sao di chuyển hình?

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

    Question Mô phỏng RÒNG RỌC ở Chế độ ĐỒ HỌA, làm sao di chuyển hình?

    Code:
    #include <graphics.h>
    #include <dos.h>
    #include <conio.h>
    #include <stdlib.h>
    
    void khoi_tao()
     {
      int n, m;
      n=DETECT; initgraph(&n,&m,"C:\\TC\\BGI");
     }
    
    void ve1()
     {
        int x,y, x1,y1, x2,y2, x3,y3, x4,y4, x5,y5, x6,y6;
        int r=30;
        x=getmaxx()/2;
        y=getmaxy()/2;
    
        x1=x-120;                          // Toa do diem A
        y1=y-60;
    
        x2=x+120;                          // Toa do diem B
        y2=y-60;
    
        x3=x+120;                          // Toa do diem C
        y3=y+230;
    
        x4=x-120;                          // Toa do diem D
        y4=y+230;
    
    
        circle(x,y,3);                   // Hinh tron lam tam
        setfillstyle(1, RED);
        floodfill(x+2,y, WHITE);
    
        putpixel(x1,y1, WHITE);   // dinh A
        putpixel(x2,y2, WHITE);   // dinh B
    
        putpixel(x3,y3, WHITE);   // dinh C
        putpixel(x4,y4, WHITE);   // dinh D
    
    
    
        circle(x1,y1, r);                  // RONG ROC trai
        setfillstyle(1, CYAN);
        floodfill(x1+2, y1+2, WHITE);
    
        circle(x2,y2, r);                  // RONG ROC phai
        setfillstyle(1, CYAN);
        floodfill(x2+2, y2+2, WHITE);
    
        rectangle(x1,y1,x3,y3);            // Hinh chu nhat ABCD
        setfillstyle(1,BLUE);
        floodfill(x+5,y+5, WHITE);
    
    
        setcolor(RED);
        line(x1,y1-30,x2,y2-30);           // soi day L
        line(x1-30,y1,x-150,y+170);
        line(x2+30,y2, x+150,y+80);
    
     }
    void ve2() //(int color, int color_part )
     {
       int x,y, a,b, a1,b1, a2,b2, a3,b3;
    
    
       x=getmaxx()/2;
       y=getmaxy()/2;
    
       a=x-180;
       b=y+170;
    
       a1=x-121;
       b1=y+230;
    
       a2=x+121;
       b2=y;
    
       a3=x+180;
       b3=y+80;
    
       rectangle(a,b,a1,b1);
       setfillstyle(1, RED);
       floodfill(a+20, b+20, RED);
    
       rectangle(a2,b2,a3,b3);
       setfillstyle(1, RED);
       floodfill(a2+20, b2+20, RED);
    
     }
    
    void main()
     {
    
       khoi_tao();
       ve1();
       ve2();
       getch();
       closegraph();
     }
    Em mới làm được mỗi phần tĩnh của bài mô phỏng này !!!
    Còn thiếu phần vòng lặp để QUẢ TẠ di chuyển nữa :(
    Mong m.ng góp ý

    P/s: Hình nó đây ạh! Giờ làm sao để hai quả tạ màu đỏ đó di chuyển lên xuống :-s hic


  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Lấp hình :
    Tức là xóa cái đống pixel đã vẽ ở phía đuôi của vật duy chuyển. THay vào đó là bổ sung thêm pixel cần vẽ thêm ở đầu vật di chuyển.
    ->Thực hiện việc này nhịp nhàng theo thời gian delay nào đấy thì sẽ tạo ra "hiệu ứng di chuyển"
    Bằng không thì lên google search cái vấn đề vẽ hình chuyển động trong lập trình là rồi, nó ra cho 1 đống
    ____________
    Bạn viết hàm kiểu đấy đến khi viết cái hàm mới thì coi như phải viết lại từ đầu chứ chả thừa hưởng được chút gì cả
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    02 2012
    Nơi ở
    Xanhpetecbua-Nga
    Bài viết
    34

    mình bận nên làm nhanh cho bạn:
    Code:
    #include <iostream>
    #include <graphics.h>
    using namespace std;
    int x,y,x1,y1,x2,y2;
    int ve1()
    {
       //ve soi day
        setcolor(RED);
        line(x1,y,x1,y1);
        line(x2,y,x2,y2);
        //ve vat nang
        rectangle((x1-29),y1,(x1+29),y1+40);
        setfillstyle(1,RED);
        floodfill(x1,y1+2,RED);
        rectangle((x2-29),y2,(x2+29),y2+50);
        setfillstyle(1,RED);
        }
        int ve2()
    {
        //ve soi day
        setcolor(BLACK);
        line(x1,y,x1,y1);
        line(x2,y,x2,y2);
        //ve vat nang
        rectangle((x1-29),y1,(x1+29),y1+40);
        setfillstyle(1,BLACK);
        floodfill(x1,y1+2,BLACK);
        rectangle((x2-29),y2,(x2+29),y2+50);
        setfillstyle(1,BLACK);
        }
    int main( )
    {
       initwindow( 640 , 480 , "Rong_roc" );
        x=getmaxx()/2;
    	y=getmaxy()/2;
        //ve truc quay
    	circle((x-100),y,30);
    	setfillstyle(1,CYAN);
        floodfill(x-101,y,WHITE);
    	circle((x+100),y,30);
        setfillstyle(1,CYAN);
        floodfill(x+101,y,WHITE);
         //ve HCN
    	rectangle((x-100),y,(x+100),getmaxy());
    	setfillstyle(1,BLUE);
    	floodfill(x,y+2,WHITE);
        //ve soi day tren
        setcolor(RED);
        line(x-100,y-30,x+100,y-30);
        x1=x-130;
        y1=y+150;
        x2=x+130;
        y2=y+70;
        while( !kbhit() )
    	{
               if(y1<(y+50))
               {
                            y1=y+150;
                            y2=y+70;
                        
               }
               ve1();
               delay(100);
               ve2();
               y1--;
               y2++;
            }
      closegraph( );
        
    	return( 0 );
    }
    Đã được chỉnh sửa lần cuối bởi buithetai : 18-02-2012 lúc 04:05 PM.

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

    Trích dẫn Nguyên bản được gửi bởi buithetai Xem bài viết
    mình bận nên làm nhanh cho bạn:
    Code:
    #include <iostream>
    #include <graphics.h>
    using namespace std;
    int x,y,x1,y1,x2,y2;
    int ve1()
    {
       //ve soi day
        setcolor(RED);
        line(x1,y,x1,y1);
        line(x2,y,x2,y2);
        //ve vat nang
        rectangle((x1-29),y1,(x1+29),y1+40);
        setfillstyle(1,RED);
        floodfill(x1,y1+2,RED);
        rectangle((x2-29),y2,(x2+29),y2+50);
        setfillstyle(1,RED);
        }
        int ve2()
    {
        //ve soi day
        setcolor(BLACK);
        line(x1,y,x1,y1);
        line(x2,y,x2,y2);
        //ve vat nang
        rectangle((x1-29),y1,(x1+29),y1+40);
        setfillstyle(1,BLACK);
        floodfill(x1,y1+2,BLACK);
        rectangle((x2-29),y2,(x2+29),y2+50);
        setfillstyle(1,BLACK);
        }
    int main( )
    {
       initwindow( 640 , 480 , "Rong_roc" );
        x=getmaxx()/2;
    	y=getmaxy()/2;
        //ve truc quay
    	circle((x-100),y,30);
    	setfillstyle(1,CYAN);
        floodfill(x-101,y,WHITE);
    	circle((x+100),y,30);
        setfillstyle(1,CYAN);
        floodfill(x+101,y,WHITE);
         //ve HCN
    	rectangle((x-100),y,(x+100),getmaxy());
    	setfillstyle(1,BLUE);
    	floodfill(x,y+2,WHITE);
        //ve soi day tren
        setcolor(RED);
        line(x-100,y-30,x+100,y-30);
        x1=x-130;
        y1=y+150;
        x2=x+130;
        y2=y+70;
        while( !kbhit() )
    	{
               if(y1<(y+50))
               {
                            y1=y+150;
                            y2=y+70;
                        
               }
               ve1();
               delay(100);
               ve2();
               y1--;
               y2++;
            }
      closegraph( );
        
    	return( 0 );
    }
    mình cảm ơn bạn! nhưng có mấy dòng lệnh mình hiểu... có mấy dòng chưa học tới nhưng cover lại đc rồi cảm ơn nhé

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

  1. Dịch vụ chuyển nhà chất lượng cao tại Hà Nội
    Gửi bởi duongtu001 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-04-2013, 11:16 PM
  2. cho mình hỏi Làm sao để chuyển code qua máy khác mà vẫn chạy bình thường
    Gửi bởi laing111 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 6
    Bài viết cuối: 15-10-2012, 11:34 AM
  3. Khi chuyển đến ngôi nhà mới cần chú ý điều gì ?
    Gửi bởi thanhhung2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-08-2011, 03:34 PM
  4. Cách phát hiện va chạm giữa 2 hình chuyển động trong C#?
    Gửi bởi start_89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 28-01-2010, 05:55 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