Autor Beitrag
PongPong
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 01.07.22 11:33 
Vorab: Ich bin Anfänger und hab als Aufgabe eine Art "Pong" zu erstellen.

Guten Tag. Ich hätte da 2 Fragen, bei denen ich hoffe, dass mir da jemand helfen kann.

Zur ersten: Wie kann ich diese ganzen Whiles für die Richtungen in die der Ball springt zusammenfassen, so dass er dauerhaft weiter springt, bis er unter dem Bouncepad landet? Aktuell hab ich alles in einzelnen whiles und müsste für eine lange Runde noch sehr viel mehr while Schleifen erstellen, damit er immer weiter bounct.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
    
     while Ball.Top < 1009 do
     begin
          Ball.Left := Ball.Left + BallSpeed;
          Ball.Top  := Ball.Top + BallSpeed;
          Refresh;
     end;

     BallSpeed := - BallSpeed;

     while Ball.Top > 0 do
     begin
          Ball.Left := Ball.Left + 1;
          Ball.Top  := Ball.Top + BallSpeed;
          Refresh;
     end;

     while Ball.Top < 1009 do
     begin
          Ball.Left := Ball.Left + BallSpeed;
          Ball.Top  := Ball.Top + 1;
          Refresh;
     end;

          while Ball.Top > 0 do
     begin
          Ball.Left := Ball.Left - 1;
          Ball.Top  := Ball.Top - 1;
          Refresh;
     end;

          while Ball.Top < 1009 do
     begin
          Ball.Left := Ball.Left + BallSpeed;
          Ball.Top  := Ball.Top + 1;
          Refresh;
     end;


Die 2.Frage: Wie tracke ich, dass der Ball das sich bewegende Bouncepad trifft, damit der Ball dann in andere Richtungen fliegt und Punkte im Highscore gesammelt werden können?


LG
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 01.07.22 12:30 
Hallo und :welcome:,

genau so, wie du für die Ballbewegung eine Schleife erstellt hast, kannst du auch darum herum eine weitere Schleife erstellen, welche du mit einer Bedingung verknüpfst (bzw. zum Test einfach while(true)).

In welcher Ereignisfunktion steht denn der Code bisher?
Denn solange es kein Konsolenprogramm ist, sondern eine Windows-Anwendung (d.h. innerhalb einer Form), sollte für die Bewegung ein Timer benutzt werden (anstatt der while-Schleifen), da sonst die Form blockiert und Windows dann "die Anwendung reagiert nicht" anzeigt!

Und zu deiner 2. Frage: mittels TRect.Intersects kannst du abfragen, ob sich zwei Rechtecke (d.h. BoundsRect von Ball und Bouncepad) überschneiden.

PS: Außerdem solltest du einfach zwei Variablen BallSpeedX und BallSpeedY haben, so daß du nur jeweils eine einzige Zeile (für Veränderung von Ball.Left und Ball.Top) benötigst.