Exemple #1
0
        // tworzę funkcję wystartowania kulek
        public void Restart(int ilosc_kulek)
        {
            // Point(x,y)

            Point start = new Point(1, 1);

            // tablice - by nie zawalać - SPRAWDZIC!! - odwołanie do klasy Kulka
            kulki = new kulka[ilosc_kulek];
            for (int i = 0; i < ilosc_kulek; i++)
            {
                kulki[i] = new kulka(start, new Point(random.Next(0, 5), random.Next(0, 5)), random.Next(30, 50));
            }
            // ostatnie - wielkosc

            // refresh
            Invalidate();
        }
Exemple #2
0
        // TranslateTransform i Scale?
        public void kolizja_z_inna(kulka ikulka)
        {
            //haha, intersectswith - przecinanie się :D
            // liczenie distant(polozenie1 - polozenie 2) < (promien1+promien2)^2 itd...
            // (Length(dist))

            //czy zderza się z inna kulka - ikulka
            if (Kwa.IntersectsWith(ikulka.Kwa))
            {
                Point dist     = ikulka.Center - (Size)Center;
                float distance = Length(dist);                        // sqrt(pol1 do pol2)

                if (distance <= Kwa.Width / 2 + ikulka.Kwa.Width / 2) // promienie
                {
                    PointF os_dystans = new PointF(dist.X / distance, dist.Y / distance);

                    // wywala blad zmiany jednostki
                    float os_predkosc   = mnoze(os_dystans, speedy);
                    float os_ikulkspeed = mnoze(os_dystans, ikulka.speedy);

                    // aaaaaaa
                    if (os_predkosc > os_ikulkspeed)
                    {
                        PointF bu_dystans = new PointF(os_dystans.Y, -os_dystans.X);
                        // do zmiany powyzsze

                        PointF os_wekt = Scale(os_dystans, os_predkosc);
                        PointF wekt    = Scale(bu_dystans, mnoze(bu_dystans, speedy));

                        // coś tu wywala?

                        PointF ikulkaos_wekt = Scale(os_dystans, os_ikulkspeed);
                        PointF ikulkawekt    = Scale(bu_dystans, mnoze(bu_dystans, ikulka.speedy));

                        speedy        = Point.Round(Add(ikulkaos_wekt, wekt));
                        ikulka.speedy = Point.Round(Add(os_wekt, ikulkawekt));
                    }
                }
            }
        }