Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Problem bei Pong Programmierung

  Alt 7. Okt 2008, 03:08
Das Problem mit deinem Sourcecode ist, dass du versucht alles in einer Procedure zu erledigen.
Du bekommst dann jede Menge Code, der zwar von dir noch einigermassen gut kommentiert ist, aber trotzdem recht schwer zu lesen ist.
Ein zentrales Problem scheint ja zu sein, festzustellen, ob ein Punkt innerhalb eines Kreises liegt oder nicht.
Dazu eine kleine Hilfsfunktion:
Delphi-Quellcode:
function PointInCircle(p, center:TPoint; radius:integer):Boolean;
begin
  // SQR() = Square-Funktion = quadrieren
  // Hier wird die Formel a^2 + b^2 = c^2 von Pythagoras ausgenützt
  Result := SQR(p.x-center.x) + SQR(p.y-center.y) <= SQR(radius);
end;
Mit dieser Funktion kannst du an einigen Stellen eine Vereinfachung vornehmen.
Die Funktion nimmt zwei Punkte mit dem Datentyp TPoint entgegen.
Um x/y-Werte in einen TPoint umzuwandelt, gibt es die Point()-Funktion:
if PointInCircle(Point(0,0), Point(Shape1.left, Shape1.Top), 50) then ... Wenn du herausfinden möchtest, ob ein Kreis innerhalb eines Rechtecks liegt, gibt es einen einfachen Trick:
Man prüft nicht, ob der Kreis im Rechteck liegt, sondern ob der Mittelpunkt in einem verkleinertem Rechteck liegt.
Also:
1.) Rechteck an allen 4 Seiten um den Radius verkleinern
2.) prüfen, ob Mittelpunkt innerhalb des Rechteck liegt
Dazu gibt es schon Hilfsfunktionen aus der Windows-API.
InflateRect() vergrössert oder verkleinert ein Rechteck.
PointInRect() prüft, ob ein Punkt innerhalb eines Rechtecks liegt.
  Mit Zitat antworten Zitat