Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Spiel nachprogrammieren - Gegnerberührung funktioniert nicht

  Alt 28. Aug 2012, 22:39
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat