Du brauchst erstmal die Richtung, in die sich die Schiffe bewegen sollen - sozusagen einen "Pfeil" der in Richtung der Mitte zeigt (man munkelt Fachleute sollen hier auch von einem "Vektor" sprechen). Diesen Vektor bekommst du ganz einfach:
Delphi-Quellcode:
var
vx, vy: Double;
begin
vx := MitteX - MitteSchiffX;
vy := MitteY - MitteSchiffY;
end;
Nun ist dieser Vektor jedoch für unterschiedliche Schiffe unterschiedlich lang (vergleiche Ecke oben links mit mitte links außen). Du musst den Vektor also normalisieren. Dazu brauchen wir erstmal die Länge des Vektors (entspricht dem Abstand zu Mitte), die einfach mit dem Satz des Pythagoras ausgerechnet werden kann:
Delphi-Quellcode:
var
laenge: double;
begin
laenge := sqrt(sqr(vx) + sqr(vy));
vx := vx / laenge;
vy := vy / laenge;
end;
Nun kannst du in einem Timer die Schiffe n Schritte an den Pfeil entlangwandern lassen, wobei n die Geschwindigkeit ist (in diesem Fall 10px pro Timerintervall):
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
schiffx := round(schiffx + vx * 10);
schiffy := round(schiffy + vy * 10);
end;
Um die Schiffe nich miteinander Kollidieren zu lassen musst du auch hier den Abstand zwischen den Schiffen ausrechnen und entsprechend reagieren. Um die Schiffe einige Pixel vor der Mitte zu stoppen, musst du den Abstand zur Mitte berechnen und wenn dieser einen gewissen Wert hat stoppen.