26. Februar 2012

Prüfen ob in einer C# Forms Anwendung zwei Panele kollidieren

26. Februar 2012 - Geschrieben von Martin - 4 Kommentare

Um zu prüfen ob zwei Panele in einer C# Windows Forms Anwendung miteinander kollidieren, habe ich mir eben eine kleine Panel Collider Klasse geschrieben, die anhand der Position sowie Höhe und Breite prüft ob sich zwei Panele berühren.

class panelCollider
{
    public static bool check(Panel one, Panel two)
    {
        if (one.Left == two.Left)
        {
            if (one.Top == two.Top)
            {
                return true;
            }
            else if (one.Top < two.Top)
            {
                if (one.Top + one.Height >= two.Top)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                if (two.Top + two.Height >= one.Top)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        else if (one.Left > two.Left)
        {
            if (two.Left + two.Width >= one.Left)
            {
                if (one.Top == two.Top)
                {
                    return true;
                }
                else if (one.Top < two.Top)
                {
                    if (one.Top + one.Height >= two.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (two.Top + two.Height >= one.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        else if (one.Left < two.Left)
        {
            if (one.Left + one.Width >= two.Left)
            {
                if (one.Top == two.Top)
                {
                    return true;
                }
                else if (one.Top < two.Top)
                {
                    if (one.Top + one.Height >= two.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (two.Top + two.Height >= one.Top)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
}

Soweit ich es in meiner Anwendung testen konnte, funktioniert sie. Sollte doch noch jemandem ein Fehler auffallen, würde ich mich über einen Kommentar freuen.