Announcement

Collapse
No announcement yet.

Va chạm động của 2 rectangle

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Va chạm động của 2 rectangle

    Chào anh chị! e đang viết 1 chương trình đơn giản là cho 2 HCN đơn giản chạy theo hướng ramdon. Vấn đề em gặp phải là e viết hàm va chạm để xử lý khi 2 HCN này chồng lên nhau
    nhưng không thành công.
    e đã dùng hàm intersectswith để phát hiện va chạm.
    E dùng int huong = ramdon1.Next(1,5) tương ứng mỗi số sẽ là 1 hướng............
    ở đây là e muốn khi 2 HCN chạm nhau:
    1. 1 hình dừng lại chờ HCN chạy qua rồi sau đó chạy tiếp.
    Hoặc là cả 2 hình chữ nhật đổi hướng....chạy theo hướng khác.

    ý tưởng là vậy nhưng e làm mãi ko được. Mong anh chị giúp đỡ :sogood::sogood:

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace di_chuyen_hcm
    {
        public partial class Form1 : Form
        {
            private int so1;
            private int so2;
            private int so11;
            private int so22;
            private int x;
            private int y;
            private int x1;
            private int y1;
            private int width;
            private int height;
    
           
    
            Random random1 = new Random();
            Random random2 = new Random();
            
    
            Rectangle r;
            Rectangle r1;
    
            bool run = true;
            bool run1 = true;
    
           public Form1()
            {
                InitializeComponent();
                x = y = 0;
                width = 100;
                height = 50;
                x1 = this.ClientSize.Width - width;
                y1 = this.ClientSize.Height - height;
                r = new Rectangle(x, y, width, height);
                r1 = new Rectangle(x1, y1, width, height);
                so1 = random1.Next(1, 5);
                so2 = random2.Next(1, 5);
                
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                r = new Rectangle(x, y, width, height);
                r1 = new Rectangle(x1, y1, width, height);
                e.Graphics.DrawRectangle(new Pen(Brushes.Blue, 2), r);
                e.Graphics.DrawRectangle(new Pen(Brushes.Red, 2), r1);
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                
                if (so1 == 1)
                {
                    len();
                }
                if (so1 == 2)
                {
                    xuong();
                }
                if (so1 == 3)
                {
                    trai();
                }
                if (so1 == 4)
                {
                    phai();
                }
    
    
                if (so2 == 1 )
                {
                    len1();
                }
                if (so2 == 2)
                {
                    xuong1();
                }
                if (so2 == 3)
                {
                    trai1();
                }
                if (so2 == 4)
                {
                    phai1();
                }
                vacham();
                Invalidate();
                this.DoubleBuffered = true;
            }
    
            public void len()
            {
                y -= 3;
                if (y <= 0)
                {
                    y = 0;
                    
                    so1 = random1.Next(1, 5);
                }
                
            }
    
            public void xuong()
            {
                y += 3;
              
                if (y + height >= this.ClientSize.Height)
                {
                   
                    y = this.ClientSize.Height - height;
                    so1 = random1.Next(1, 5);
                }
                
            }
    
            public void trai()
            {
                x -= 3;
                
                if (x <= 0)
                {
                    x = 0;
                    
                    so1 = random1.Next(1, 5);
                }
               
            }
    
            public void phai()
            {
                x += 3;
                
                if (x + width>= this.ClientSize.Width)
                {
                    x = this.ClientSize.Width - width;
                   
                    so1 = random1.Next(1, 5);
                }
                
            }
    
            public void len1()
            {
                y1 -= 3;
                if (y1 <= 0)
                {
                    y1 = 0;
                    
                    so2 = random2.Next(1, 5);
                }
            }
    
            public void xuong1()
            {
                y1 += 3;
                if (y1 + height >= this.ClientSize.Height)
                {
                    
                    y1 = this.ClientSize.Height - height;
                    so2 = random2.Next(1, 5);
                }
            }
    
            public void trai1()
            {
                x1 -= 3;
                if (x1 <= 0)
                {
                    x1 = 0;
                    
                    so2 = random2.Next(1, 5);
                }
            }
    
            public void phai1()
            {
                x1 += 3;
                if (x1 + width >= this.ClientSize.Width)
                {
                    
                    x1 = this.ClientSize.Width - width;
                    so2 = random2.Next(1, 5);
                }
            }
    
    //         public void vacham()
    //         {
    //             if (r.IntersectsWith(r1))
    //             {
    //                 
    //             }
    //         }
        }
    }

  • #2
    Không có ai giúp em sao :cry:

    Comment


    • #3
      Chào bạn. Mình rất muốn giúp bạn đưa ra code tuy nhiên giờ thời gian k cho phép.
      Bạn có thể đọc kĩ link này, chắc chắn sẽ giúp được bạn :

      nguyendauit@gmail.com

      Comment


      • #4
        Không được là không được như thế nào? Hai hình chữ nhật không va chạm? Hai hình chữ nhật chồng lên nhau mà không xảy ra sự kiện va chạm?
        https://ledsieure.com - Tết rồi, mua đèn về trang trí đi

        Comment

        LHQC

        Collapse
        Working...
        X