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: Vẽ một Auto-bouncing Ball trong lập trình C

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Lightbulb Vẽ một Auto-bouncing Ball trong lập trình C

    Mình nhận bài tập là viết một cái Auto-Bouncing Ball .
    Hiểu như thế này :
    màn hình có đường biên có kí hiệu # trải dài
    tọa độ biên : Top = 1 ; Bottom = 23 ; Left = 1 ; Right = 80
    một quả bóng kí hiệu : * chuyển động ngẫu nhiên từ lúc khởi động
    Function BoucingBall( int sx, int sy, int dx, int dy )
    (sx,sy) : tọa độ bóng
    (dx,dy) : hướng chuyển động và độ lệch khi di chuyển của bóng .
    trong đó : | dx,dy | <= 3
    Lấy ví dụ : BouncingBall ( 25,7,3,2) thì bóng xuất phát tại điểm ( 25,7) và hướng chuyển động ban đầu ( trái -> phải , trên -> dưới ) . Do đó điểm dừng tiếp theo là ( 25 + 3 , 7 + 2 ) = ( 28 , 9 ) . Bóng chuyển động một cách tự động kô có điều khiển.
    Bóng chạm vào đường biên và đổi hướng chuyển động.
    [ Bài này không liên quan đến đồ họa nha ]

    C Code:
    1. //Một hàm để hiện bóng :
    2. void SetBall ( int sx, int sy )
    3. {
    4.     gotoxy(sx,sy); printf("*");
    5. }
    6.  
    7. //Một hàm để xóa bóng tại vị trí cũ :
    8. void ClearBall ( int sx, int sy )
    9. {
    10.     gotoxy(sx,sy); printf(" ");
    11. }

    Vấn đề bây giờ là làm sao xử lý sự chuyển động của bóng khi chạm zo biên .
    [ Mình kô thể upload ví dụ lên được kô biết tại sao ]
    Các bạn xem thử ví dụ tại đây : http://rapidshare.com/files/1122392/pete_game.rar

    Giúp mình nhé !

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Bạn thử lưu lại 2 tọa độ vị trí của quả bóng (thời điểm hiện tại và thời điểm gần hiện tại nhất) rồi khi bóng chạm biên bạn sẽ biết được bóng đi theo đường nào dựa trên 2 tọa độ này.

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Cái này phải xác định đường biên, tức là nếu bóng chạm vào một điểm nào đó thuộc đường biên này thì sẽ chuyển hướng. Đường biên chỉ cần 2 điểm đầu cuối nếu như biên là đường thẳng. Và hàm xác định điểm thuộc đường thẳng là khá dễ. (Kể cả đường đua cũng dễ)

    Vấn đề nữa là, sự va chạm. Nếu xét chi tiết thì phải xét đến tính chất vật lý của vật được va chạm, sự va chạm, và lực va chạm, ma sát (bỏ qua các yếu tố ít ảnh hưởng) hướng bóng sau khi va chạm. Cũng dài đó và rắc rối đó nha, cần phải tư duy mới được.

    Mong là các bạn bổ sung thêm
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

  4. #4
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    No need too complex like that .
    Yêu cầu như trên mình đã viết .

    Đường biên được vẽ thế này :

    C Code:
    1. // top
    2. gotoxy(1,1);for ( (int) i = 1 ; i <= 80 ; i++ ) printf("#");
    3.  
    4. // left + right
    5. for ( i = 2 ; i <= 22 ; i++ )
    6. {
    7. gotoxy(1,i); printf("#");
    8. gotoxy(80,i);printf("#");
    9. }
    10.  
    11. // bottom
    12. gotoxy(1,23);for( i = 1; i <= 80 ; i++ ) printf("#");

    Bây giờ xử lý bóng khi chạm thành thế nào nhỉ ?

    Cái này không phải physics nên không tính reforce or rebound ..

  5. #5
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Thì đã nói ở trên rồi còn đâu, ở trên mình đã nói về cách xử lý bóng sau khi chạm thành. Hay là bạn muốn nói về xử lý để biết khi nào bóng chạm thành, cái này thì dựa vào tọa độ của nó so với cái số 1, 80, 23 chứ sao nữa.

  6. #6
    Ngày gia nhập
    08 2006
    Bài viết
    59

    Mặc định Vẽ một Auto-bouncing Ball trong lập trình C

    Tui đoán bạn muốn làm va chạm lý tưởng ?
    Nếu như vậy thì tui nghĩ:

    Khi banh chạm vô 1 bức tường thẳng đứng => dx đảo dấu
    Khi banh chạm vô 1 bức tường nằm ngang => dy đảo dấu
    Trường hợp đặc biệt, khi banh chạm vô "góc" => dx lẫn dy đều đảo dấu

    (có gì sai sót mong được góp ý, xin cám ơn)

    -thân

  7. #7
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Ý của pete chắc là: Làm sao xác định được kết quả của sự va chạm sau khi bóng chạm thành. Ở đây chỉ có 2 vấn đề cần nói đến là tốc độ của bóng và hướng di chuyển của bóng sau khi va chạm (Cái này là bài toán va chạm phẳng).

    Nếu bỏ qua các yếu tố ngoại tác, và biên là cứng hoàn toàn(nếu biên mềm thì rắc rối đó) thì hướng bóng sau khi va chạm sẽ có phương đối xứng với phương ban đầu qua pháp tuyến của biên (Biên ở đây chỉ là phần biên trong phạm vi va chạm, nó rất nhỏ)

    Còn vận tốc thì tính theo PT định luật bảo toàn động lượng.

    Rất mong được góp ý bổ sung các chỗ sai.
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

  8. #8
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Ai cũng toàn viết ra những cái không đáng nói vì cái đó ai chẳng biết .-_-!

    Tại sao không ai nghĩ đến cái dx và dy ( 1. dx = dy ; 2. dx != dy )
    Muốn xác định điểm tới thì vẽ cái symetric là có được điểm tới . Cái mình không nghĩ ra là làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành và cách hiển thị nó ra sao ? nhất là với dx != dy

  9. #9
    Ngày gia nhập
    08 2006
    Bài viết
    59

    làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành
    Từ các dữ kiện:

    (sx,sy) : tọa độ bóng
    (dx,dy) : hướng chuyển động và độ lệch khi di chuyển của bóng

    => bạn có thể tìm ra phương trình đường thẳng d của trái banh phải không ?

    Coi màn hình có 4 biên là 4 đường thẳng dài vô hạn
    => đường d ở trên sẽ cắt mỗi đường biên này ở 1 điểm
    => bạn có 4 giao điểm (nếu cắt ở góc màn hình thì có 2 giao điểm là trùng nhau)
    => bạn chọn giao điểm nào "nằm trong" màn hình là được

    Kế đến, coi giao điểm vừa tìm được ở trên như là điểm xuất phát (sx, sy) mới; và dx, dy sau khi banh dội ra ở điểm này là dx và dy mới => bạn lại làm như trên

    và cách hiển thị nó ra sao
    => tui không rõ bạn muốn hiển thi cái gì ? Hiển thị giao điểm ?

    Ai cũng toàn viết ra những cái không đáng nói vì cái đó ai chẳng biết
    => tui nghĩ bạn không nên nói câu này !!! Mọi người đã bỏ thời gian ra đọc và trả lời cho bạn. Nếu không đúng ý thì có thể là vì bạn nêu câu hỏi không rõ ràng ! Tui sợ là tới lúc không ai đọc hoặc đọc mà không bỏ công trả lời cho bạn thì e là bạn có hối cũng không kịp :(

    (có gì sai sót mong được góp ý, xin cám ơn)

    -thân
    Đã được chỉnh sửa lần cuối bởi bete : 30-10-2006 lúc 04:59 PM.

  10. #10
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Dreaminess vừa xem cái chương trình bạn gửi nên. Nhưng chưa hiểu chính xác ý tưởng là gì?

    Cái mình không nghĩ ra là làm sao tính được tọa độ của cái điểm mà bóng chạm vô thành và cách hiển thị nó ra sao ? nhất là với dx != dy
    Tọa độ điểm bóng chạm thành? Không phải tọa độ của bóng sao Pete?, còn phải tính nữa ah?. Dùng wherex() và wherey() là có được ngay thôi. dx !=dy đâu có ảnh hưởng gì đến việc này nhỉ?

    Còn hiển thị như thế nào? Quả thực Dreaminess cũng không hiểu là muốn hiển thị cái gì?
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

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

  1. Auto UP TIM,Auto KILL Boss,BUG HD,ĐÀO XINH..Phiên Bản 6116, Up Tim 20 Tim 1 Lần Hach
    Gửi bởi mrkhang 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: 28-06-2012, 05:18 AM
  2. MouseModz Auto UP TIM,Auto KILL Boss,BUG HD,ĐÀO XINH..Auto Tim 6114,Auto Tim 6114,Auto Tim 6114
    Gửi bởi mrkhang 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: 19-06-2012, 12:47 AM
  3. Hack Au 6096 -VnAudition 6096 Auto Uptim Auto Key Auto F6 Auto Space 6096
    Gửi bởi acura5011 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 23-06-2011, 08:38 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