// 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(); }
// 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)); } } } }