Fizyka pileczki w grze pong

0

Napisalem juz wszystko odnosnie mojej gry w ponga ale nie mam pomyslu jak zrobic ruch pileczki, przejrzalem troche projektow na github'ie ale tamte rozwiazania troche nie pasuja do mojego kodu, nie wiem jak zaczac, nie mam pomyslu, moglby mnie ktos naprowadzic troche ?
tu kod: https://bpaste.net/show/e041338798cd
Zrobilem juz tam strukture dla pozycji pileczki i ogolnych danych z gry pilka + gracz, tylko nie mam pomyslu na funkcje ktora bedzie ta pilka poruszac...

0

W najprostszym przypadku wykorzystaj ruch jednostajny prostoliniowy.

0

Nie rozumiem... No jednostajny prostoliniowy oczywiscie, ale jak to napisac nie mam pojecia, jaki algorytm do tego wymyslic, w tym jest problem.

0

Ot, wektor prędkości, któremu należy odpowiednio modyfikować zwrot i kierunek przy uderzeniu

1

Jaki wektor ? Ja chce zeby program byl napisany w C, jak to zrobic w tym jezyku ?

1

Wektor jako pojęcie fizyczne

0

No okej ale jak to stworzyc w c i od czego zaczac, no nie rozumiem, mozecie mi rzucac jakimis slowami typu "jednostajnie prostoliniowo" albo "wektor" ale nie mam pojecia jak to zaimplementowac, jak zaczac pisac chociaz jedna linijke w tym kierunku

1

masz 4 zmienne:
int x, y; <--- pozycja piłeczki
int v_x, v_y; <--- prędkość piłeczki (może być ujemna)

co iteracje zwiększasz x+=v_x i y+=v_y;
jeżeli piłeczka odbija się od czegoś musisz tylko zmienić zwrot prędkości np
v_x=-v_x;
v_y=v_y; <--- dlatego że tylko jedna składowa zostanie zmieniona;

musisz tylko rozważyć sytuacje kiedy piłeczka odbija się od konkretnej ścianki.

0

Nie wiem czy Ci to pomoże ale ruch piłeczki odbijającej się od ścianek w 2D masz poniżej (w Delphi) oraz w załączniku cały projekt. Na studiach miałem kiedyś coś podobnego jaki ćwiczenie i gdzieś mi się ten kod uchował.

procedure TForm1.Timer1Timer(Sender: TObject);
const x:integer=6;
      y:integer=6;
      krokx:integer=6;
      kroky:integer=6;
begin
    with PaintBox1.Canvas do
    begin
      //czyszczenie prostok╣ta
      Brush.Color:=clWhite;
      Rectangle(0,0,200,200);
     //obliczenie wspˇ│rzŕdnych
      x:=x+krokx;
      y:=y+kroky;
     //rysowanie ko│a w kwadracie o boku
     // rˇwnym 6 pikseli
     Brush.Color:=clBlue;
     Ellipse(x-6, y-6, x+6, y+6);
     if (x>Paintbox1.Width-6) then
     begin
       krokx:=6+Random(5);
       krokx:=-krokx;
     end;
     if (y>Paintbox1.Height-6) then
     begin
        kroky:=6+Random(5);
        kroky:=-kroky;
     end;
     if (x<=6) then krokx:=-krokx;
     if (y<=6) then kroky:=-kroky;
   end;  //with
end;
0

Dobra dzieki wszystkim, szczegolnie za podpowiedz o tych predkosciach, teraz mam juz pewien zamysl, usiade nad tym troche i dam znac jak wyszlo, dzis wieczorem albo jutro.

1 użytkowników online, w tym zalogowanych: 0, gości: 1