Nur mal so für Spaß eine vereinfachte Betrachtungsweise:
Delphi-Quellcode:
type
TFigur = class
Top, Left : Integer;
function AbstandZu( aFigur : TFigur ) : Extended;
end;
TSpieler = class( TFigur )
end;
TZiel = class( TFigur )
end;
TGegner = class( TFigur )
end;
function TFigur.AbstandZu( aFigur : TFigur ) : Extended;
begin
Result := Sqrt( Sqr( Self.Left - aFigur.Left ) + Sqr( Self.Top - aFigur.Top ) );
end;
Und im Code dann:
Delphi-Quellcode:
var
Spieler : TSpieler;
Ziele : TList;
Gegner : TList;
begin
// Gegner berührt?
for idx := 0 to Pred( Gegner.Count ) do
if Spieler.AbstandZu( TFigur( Gegner[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
GegnerKollision( TGegner( Gegner[idx] ) ); // Behandlung der Kollision mit einem Gegner
// Ziel berührt?
for idx := 0 to Pred( Ziele.Count ) do
if Spieler.AbstandZu( TFigur( Ziele[idx] ) ) < 10 then // 10 ist jetzt einfach nur als Beispiel genommen
ZielEingefangen( TZiel( Ziele[idx] ) ); // Behandlung der Kollision mit einem Ziel
end;
BTW: Für die Kollisionsbehandlung würde sich hier das Visitor-Pattern anbieten, das habe ich aber bewusst herausgelassen um nicht mehr zu verwirren. Obschon es sehr viel Charme hätte und den Code insgesamt nochmals verkürzen würde.
Wenn ich deinen Code einbaue bekomme ich ein paar Fehlermeldungen:
Delphi-Quellcode:
[Fehler] Unit1.pas(51): Bezeichner redefiniert: '
TFigur.AbstandZu'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: '
Result'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: '
Self'
[Fehler] Unit1.pas(52): Undefinierter Bezeichner: '
aFigur'
[Fehler] Unit1.pas(52): '
END' erwartet, aber '
)' gefunden
[Fehler] Unit1.pas(100): Undefinierter Bezeichner: '
idx'
[Fehler] Unit1.pas(102): Undefinierter Bezeichner: '
GegnerKollision'
[Fehler] Unit1.pas(107): Undefinierter Bezeichner: '
ZielEingefangen'
[Fataler Fehler] Project1.dpr(5): Verwendete
Unit '
Unit1.pas' kann nicht compiliert werden
Geht das denn so überhaupt für Delphi7 ?