program weihnachtsmann_wolf_pas(input,output);

uses crt;

Const ZeitScheibe=0.1;{L„nge des Simulationszeittaktes in Sekunden}

Type TKoord=(X,Y);
     TVekt =PACKED ARRAY[X..Y] of real;

VAR  WMann,Wolf:TVekt; {aktuelle Positionen der Gegner}
     WMannZiel: TVekt; {Zielposition des Weihnachtsmannes}
     WMSpeed:   TVekt; {Bewegungsvektor des Weihnachtsmannes}
     WolfSpeed: TVekt; {  ''            des Wolfes}
     Time:      Real;  {Zeittakt}

Function Treffer(a,b:TVekt):Boolean;
{Testet, ob Person andere Person oder Feld erreicht hat.}
BEGIN
     {1. M”glichkeit: vereinfachte Abstandsmessung}
{ IF (abs(a[X]-b[X]) + abs(a[y]-b[y])) < 1 THEN   }

     {2, M”glichkeit: Rundet Koordinaten und testet auf selbes Feld}
     {Auch m”glich: trunc(), je nach Interpretation der Aufgabenstellung}
  IF (round(a[X])=round(b[X])) AND (round(a[Y])=round(b[Y])) THEN
     Treffer:=TRUE
  ELSE
     Treffer:=FALSE;
END;


Procedure Speed(pos,ziel:TVekt;Tacho:Real;VAR Vektor:TVekt);
{berechnet den Bewegungsvektor in Abh„ngigkeit von Position und
 Ziel unter Bercksichtigung der Geschwindigkeit}
var richtung:TVekt;
    norm    :Real;
BEGIN
     richtung[X]:=ziel[X]-pos[X]; {Richtungsvektor ausrechnen}
     richtung[Y]:=ziel[Y]-pos[Y];

     norm:=sqrt(richtung[x]*richtung[x]+richtung[y]*richtung[y]);
     {l„nge des Richtungsvektors}

     Vektor[x]:=richtung[x]/norm; {normieren des Vektors}
     Vektor[y]:=richtung[y]/norm;

     Vektor[X]:=Vektor[X]*Tacho;  {Einrechnen der Geschwindigkeit}
     Vektor[Y]:=Vektor[Y]*Tacho;
END;

Procedure Move(VAR Wesen:TVekt;BVektor:TVekt);
{Bewegt das Wesen mit dem Geschwindigkeitsvektor BVektor unter
 Bercksichtigung der L„nge einer Zeitscheibe der Emulation.}
BEGIN
     Wesen[X]:=Wesen[X]+BVektor[X]*ZeitScheibe;
     Wesen[Y]:=Wesen[Y]+BVektor[Y]*ZeitScheibe;
END;


Procedure Ausgabe;
{gibt aktuelle Zeit und die Position der beiden Akteure aus.}
BEGIN
     GotoXY(1,WhereY);
     DelLine; {nach links gehen und Zeile l”schen}

     Write(Time    :5 :2,

           Wolf [X]:10:2,Wolf [Y]:6 :2,

           WMann[X]:8 :2,WMann[Y]:6 :2);
END;


BEGIN
     Time:=0;             {Initialisierung einiger Variablen}

     WMann[X]    :=40.0;
     WMann[Y]    := 0.0;
     WMannZiel[X]:=50.0;
     WMannZiel[Y]:=10.0;

     Speed(WMann,WMannZiel,3.0,WMSpeed); {konstant}

     WriteLn('Bitte geben Sie die Position des Wolfes ein');

     ReadLN(Wolf[X],Wolf[Y]);

     WriteLn('Sekunden    Wolf       Weihnachtsmann');


     repeat {Die Simulationsschleife}
           Ausgabe;

           if Treffer(WMann,Wolf) then BEGIN {Hat Wolf den WMan gebissen?}
              WriteLn;

              WriteLn('Weihnachtsmann wurde gebissen!');
              halt {Mampf! und Tschss!}
           END;
           move(WMann,WMSpeed); {n„chster Schritt des Weihnachtsmannes}

           Speed(Wolf,WMann,4.0,WolfSpeed); {Wolf "zielt" neu}
           move(Wolf,WolfSpeed); {und tut ebenfalls einen Schritt}

           Time:=Time+0.1; {Uhr mitz„hlen lassen}

           delay(250);     {Warteschleife fr die Ausgabe}

     until Treffer(WMann,WMannZiel); {ist der Weihnachtsmann in Sicherheit?}

     Ausgabe;
     WriteLn;
     WriteLn('Weihnachtsmann ist entkommen.'); {Puh. Es gibt doch Geschenke.}
END
.