Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Code di chuyển 1 đối tượng bằng bàn phím!

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

    Mặc định Code di chuyển 1 đối tượng bằng bàn phím!

    Em có câu bài tập thế này:
    Cho 1 đố tượng ,rồi bằng bàn phím ta di chuyển nó theo 4 hướng (Trái ,Phải,Lên Xuống)
    Trong đó tối tượng ta tự xây dựng...Hay đơn giản là 1 ký tự " X " chẳng hạn
    Phím điều khiển ta tự quy định...Hay mặc định như phím Trái ,Phải,Lên Xuống trên bàn phím cũng được.Nhưng tự quy định thì hay hơn.
    "Pác" nào biết hướng dẫn giúp...
    Hay có code mẩu ứng với trường hợp đơn giản như em trình bày ở trên càng tốt...
    Em xin cảm ơn rất nhiều!

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>

    class object
        
    {
            public:
            
    char ch;
            
    int c,tc// cot , temp cot
            
    int d,td// dong , temp dong
            
    void update(void);
        };


    object dt;


    void luachon(void)
        {
            
    char nut,nutgia='a';
            while (
    nutgia!=0xD)
                {
                
    // bat phim
                
    nutgia=getch();
                if (
    nutgia==0)
                    {
                        
    nut=getch();
                        switch(
    nut)
                            {
                                case 
    0x50:if (dt.d<48dt.d++;break;
                                case 
    0x4D:if (dt.c<80dt.c++;break;//phai
                                
    case 0x48:if (dt.d>1dt.d--;break;//len
                                
    case 0x4B:if (dt.c>1dt.c--;break;//trai
                            
    };
                    }

                
    dt.update();
                
    //chuan bi cho vong lap sau - khoi tao lai gia tri
                
    nut=0x61;
                }
        }






    void main(void)
        {
            
    clrscr();

            
    printf("*");

            
    dt.ch='X';
            
    dt.c=2;
            
    dt.d=1;
            
    dt.update();

            
    luachon();

        }



    void object::update(void)
        {
            
    gotoxy(tc,td);printf(" ");
            
    gotoxy(c,d);printf("%c",ch);
            
    tc=c;
            
    td=d;
        } 

    mới bập bẹ code C++ mong được chỉ bảo.....

    ý tưởng của mình chỉ đơn giản là thế này thôi:

    lặp :
    + nhập nút
    + phân tích địa chỉ mới: trái thì x tăng, phải thì x giảm , xuống y tăng , lên y giảm ( với x y là tham số của gotoxy)
    + đến địa chỉ cũ (x cũ, y cũ) xóa đối tượng ban đầu đi ( viết cách là đơn giản nhất )
    + đến địa chỉ mới viết lại đối tượng
    + địa chỉ cũ gán bằng địa chỉ mới
    Đã được chỉnh sửa lần cuối bởi langman : 30-03-2009 lúc 10:29 PM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    Mình về dùng VS 6.0 chạy không được,mình thêm thư viện "stdlib.h" && "wconio.h" vào rồi,vẫn chạy nhưng không làm gì được hết,chì có màn hình đen với chữ X thôi.

    Mình chạy BC 5.2 ...Ok
    Thank....a lot...
    Đã được chỉnh sửa lần cuối bởi langman : 31-03-2009 lúc 02:17 PM.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi ndp1007 Xem bài viết
    Mình về dùng VS 6.0 chạy không được,mình thêm thư viện "stdlib.h" && "wconio.h" vào rồi,vẫn chạy nhưng không làm gì được hết,chì có màn hình đen với chữ X thôi.

    Mình chạy BC 5.2 ...Ok
    Thank....a lot...
    mình dùng BC 3.01 bạn à :|
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    53

    Cho hỏi :
    Case 0x50:if (dt.d<48) dt.d++;break;
    case 0x4D:if (dt.c<80) dt.c++;break;//phai
    case 0x48:if (dt.d>1) dt.d--;break;//len
    case 0x4B:if (dt.c>1) dt.c--;break;//trai

    0x50 .....
    là gì vậy,tôi không hiểu,bạn có thể giải thích được không...! Nếu có thể nói rõ và rông thêm càng tốt
    Tôi cảm ơn rất nhiều..........!

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

    Mặc định Code di chuyển 1 đối tượng bằng bàn phím!

    Case 0x50:if (dt.d<48) dt.d++;break;
    trường hợp phím đã bấm có mã ascii là 0x50: nếu dt.d nhỏ hơn 48 thì tăng dt.d lên 1, sau đó thoát khỏi (switch case)
    code ra gió bão

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi ndp1007 Xem bài viết
    Cho hỏi :
    Case 0x50:if (dt.d<48) dt.d++;break;
    case 0x4D:if (dt.c<80) dt.c++;break;//phai
    case 0x48:if (dt.d>1) dt.d--;break;//len
    case 0x4B:if (dt.c>1) dt.c--;break;//trai

    0x50 .....
    là gì vậy,tôi không hiểu,bạn có thể giải thích được không...! Nếu có thể nói rõ và rông thêm càng tốt
    Tôi cảm ơn rất nhiều..........!
    PHP Code:
    void luachon(void)
        {
            
    char nut,nutgia='a';   
            while (
    nutgia!=0xD)
                {
                
    // bat phim
                
    nutgia=getch();
                if (
    nutgia==0)
                    {
                        
    nut=getch();
                        switch(
    nut)
                            {
                                case 
    0x50:if (dt.d<48dt.d++;break;
                                case 
    0x4D:if (dt.c<80dt.c++;break;//phai
                                
    case 0x48:if (dt.d>1dt.d--;break;//len
                                
    case 0x4B:if (dt.c>1dt.c--;break;//trai
                            
    };
                    }

                
    dt.update();
                
    //chuan bi cho vong lap sau - khoi tao lai gia tri
                
    nut=0x61;
                }
        } 

    PHP Code:
            char nut,nutgia='a'
    Đầu tiên khởi tạo 2 biến char. phải khởi tạo 2 biến vì các nút lên xuống trái phải là các nút điều khiển, mỗi khi đa ấn nó sẽ đưa vào stdin 1 bộ 2 số là 0 và 1 số nữa.
    ví dụ khi ấn nút sang trái thì nó sẽ đưa 0 và 75 vào stdin;
    75 là ở hệ cơ số 10, chuyển sang hệ cơ số 16 à 4B và trình bày trong C là 0x4B

    Gán nutgia='a' là khởi tạo giá trị ban đầu cho nutgia. Nguyên nhân:
    Trong C khi khai báo biến ko khởi tạo giá trị thì
    - biến toàn cục có giá trị ban đầu là 0
    - biến địa phương có giá trị ban đầu là ngẫu nhiên
    biến nutgia là biến địa phương, sẽ có giá trị ban đầu là ngẫu nhiên, tránh trường hợp nó ngẫu nhiên = 0xD nên tôi cho nó bằng 'a' để bảo đảm vòng lặp dưới chạy.



    PHP Code:
      if (nutgia==0
    nhập lần 1, nếu được 0 thì có nghĩa là người dùng nhập 1 phím điều khiển,
    ta dùng 1 getch() để bắt nốt giá trị còn lại truyền vào và phân tích giá trị đó để biết người ta truyền vào là nút gì ( lên xuống trái phải)


    PHP Code:
                        switch(nut)
                            {
                                case 
    0x50:if (dt.d<48dt.d++;break;
                                case 
    0x4D:if (dt.c<80dt.c++;break;//phai
                                
    case 0x48:if (dt.d>1dt.d--;break;//len
                                
    case 0x4B:if (dt.c>1dt.c--;break;//trai
                            
    }; 
    0x50 là hệ cơ số 16 và bằng 80 hệ cơ số 10
    nếu bộ số truyền vào là 0 và 80 => nút nhập vào là xuống.
    tương tự vậy với các trường hợp khác.


    nếu bấm phím xuống thì : dòng cuối màn hình ta sẽ ko cho nó xuống, vậy chỉ tăng chỉ số dòng với dt.d <48

    nếu bấm phải thì : cột thứ 80 thì sẽ ko tăng lên được nữa

    nếu bấm trái thì : cột thứ 1 sẽ ko giảm được nữa;

    nếu bấm lên thì dòng thứ 1 sẽ ko giảm nữa;

    đó là nguyên nhân sử dụng if để giới hạn ranh giới....





    PHP Code:
               dt.update(); 
    Sau khi nhập nút và tính toán tọa độ mới thì ta sẽ gọi hàm update với mục đích là xóa đối tượng ở vị trí cũ và hiển thị đối tượng ở vị trí mới



    PHP Code:
               //chuan bi cho vong lap sau - khoi tao lai gia tri
                
    nut=0x61
    đoạn code này thì ko cần thiết; 0x61 = 97 = 'a'
    hàm này trích ra và sửa lại từ 1 hàm trong bài tập lớn của mình; nó rắc rối và trong quá trình xử lý nút có thay đổi nên cuối hàm phải gán lại giá trị ban đầu cho nut. trong bài tập này thì ko cần thiết, bạn hãy bỏ đi
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  8. #8
    Ngày gia nhập
    12 2008
    Bài viết
    53

    Rất chi tiết,mình cũng hơi hiểu rồi,phải đọc kỹ thêm nữa........!
    Cày là "chính",bạn chỉ là "Mười"--Không sai chút nào
    Cảm ơn bạn rất nhiều..hihi!

  9. #9
    Ngày gia nhập
    12 2008
    Bài viết
    53

    Giờ mình muốn di chuyển đối tượng bằng chuột thì thì làm như thế nào ?

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

    EM mới tham gia diễn đàn, mới học C++ và cũng có thắc mắc như trên, em có viết thử chương trình điều khiển như thế này với lối suy nghĩ giống như trên :
    Code:
    #include<stdio.h>
    #include<conio.h>
    main()
    {
    int x,y,ch;
      clrscr();
      x=10;
      y=10;
        gotoxy(x,y);
           printf("@@");
        do
        { 
           ch=getchar();
           switch(ch)
                {
                case's': 
                      goto(x++,y);
                      printf("@@");
                      break;
                }  
    ........................................... tương tự thay với a,d,w ( trái phải, trên)  
      }     
    while(ch!=27);
    }

    Bởi vì em nghĩ rằng : Sau khi chạy xong một lần thì ch khác phím esc nên chạy tiếp và x, y đã được lưu trữ với giá trị mới đã tăng nên ta không cần phải update.
    Nhưng khi chạy thì quá nhiều lỗi phát sinh như :
    1.Sau khi điều khiền bấm di chuyển được một lần thì không điều khiển được nữa.
    2.Em để thêm 1 biến in ra trong do thì nó chạy vô tận không kiểm soát ( nhìn lại thì thấy mình viết không có cái gì cho chương trình dừng lại để nhận phím.
    3.em thêm lệnh cho nó hiện x,y thì ấy nó là 852, 864( chắc nó chạy quá do ko kiểm soát).


    Có phải cách viết của em là "ngây thơ" và sai không ạ, nếu giữ khung như vậy mà chỉnh sửa cho nó chạy thì phải chỉnh sửa như thế nào ạ

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

  1. Lập trình C++ Chuyển đổi code C++ sang code C
    Gửi bởi nemono1 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 25-05-2013, 03:39 PM
  2. Chuyển code sang code ngắn hơn trong LINQ
    Gửi bởi tinhthanhiepsi9x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-04-2012, 11:19 AM
  3. Chuyển đổi hệ cơ số | Code chuyển số integer to hệ 2, hệ 8, hệ 16?
    Gửi bởi thanhthuy40 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 18
    Bài viết cuối: 22-06-2011, 11:19 PM
  4. Chuyển code Nested Dolls từ C sang code pascal
    Gửi bởi longago trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 04-01-2011, 08:54 AM
  5. Chuyển code C++ sang code C, giúp mình với?
    Gửi bởi rong3sao trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 03-04-2009, 09:28 AM

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