home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / oop / tmotion.pas < prev   
Pascal/Delphi Source File  |  1993-06-07  |  5KB  |  126 lines

  1. (* Unit: TMOTION.PAS *)
  2. (* by Michael Starke *)
  3. UNIT tMotion;
  4.  
  5. INTERFACE
  6.  
  7. TYPE
  8.   tBike = OBJECT                   (* Definition des Urobjekts Fahrrad    *)
  9.     v       : WORD;                (* Geschindigkeit                      *)
  10.     Wheel   : BYTE;                (* Anzahl der RΣder                    *)
  11.     MaxSpeed: WORD;                (* Maximale Geschwindigkeit            *)
  12.     x, y    : WORD;                (* Die Fahrtrichtungskoordinaten       *)
  13.     Speed   : WORD;                (* Zu wΣhlende Antriebsgeschwindigkeit *)
  14.     Brake   : INTEGER;             (* Bremswirkung                        *)
  15.     CONSTRUCTOR Init(Tempo, x1, y1: WORD; Bremse: INTEGER);
  16.                  (* Initialisiert die VMT und die Felder des Objekt tBike *)
  17.     PROCEDURE  Go;    VIRTUAL;     (* Berechnug des Antriebs              *)
  18.     PROCEDURE  Stop;  VIRTUAL;     (* Berechnung der Bremswirkung         *)
  19.     PROCEDURE  Control;            (* Zentrum der Fortbewegung            *)
  20.     DESTRUCTOR Done; VIRTUAL;    (* Gibt den Speicher der VMT wieder frei *)
  21. END;
  22.  
  23.   tPlane = OBJECT (tBike)
  24.     z       : WORD;        (* tPlane definiert weitere Felder: Z fⁿr die  *)
  25.                            (* H÷henkoordinate und                         *)
  26.     up, down: WORD;        (* up und down fⁿr Auf- und Abtrieb            *)
  27.     CONSTRUCTOR Init(Tempo, x1, y1, z1, Hi, Lo: WORD; Bremse: INTEGER);
  28.     PROCEDURE   Go;   VIRTUAL;  (* Berechnung der Antriebsgeschwindigkeit *)
  29.     PROCEDURE   Stop; VIRTUAL;  (* Berechnung der Bremswirkung            *)
  30.     DESTRUCTOR  Done; VIRTUAL;
  31. END;
  32.  
  33. IMPLEMENTATION
  34.  
  35. CONSTRUCTOR tBike.Init(Tempo, x1, y1: WORD; Bremse: INTEGER);
  36. BEGIN
  37.   MaxSpeed := 100; (* Hier werden die Werte fⁿr die maximale             *)
  38.                    (* Geschwindigkeit,                                   *)
  39.   Wheel    := 2;   (* Anzahl der RΣder des Objekt Fahrrad,               *)
  40.   x := x1;         (* Fahrtrichtungskoordinate fⁿr die x-Richtung        *)
  41.   y := y1;         (* Fahrtrichtungskoordinate fⁿr die y-Richtung        *)
  42.   v := 0;          (* und die Endgeschwindigekit des Fahrrads berechnet  *)
  43.   IF Tempo > MaxSpeed
  44.     THEN Speed := MaxSpeed
  45.   ELSE Speed := Tempo;  (* maximale Geschwindigkeit darf nicht           *)
  46.                         (* ⁿberschritten werden                          *)
  47.   IF Bremse > 0
  48.     THEN Brake := 0
  49.   ELSE Brake := Bremse;    (* Negative Bremswirkung wird ebenfalls nicht *)
  50.                            (* zugelassen                                 *)
  51. END;
  52.  
  53. PROCEDURE tBike.Go;
  54. BEGIN
  55.   v := v + Speed;                 (* Der Startwert fⁿr v (Null) plus die *)
  56.                                   (* Antriebsgeschwindigkeit ergibt      *)
  57.   WriteLn(Speed, ' Go-Faktor; '); (* die ideale Geschwindigkeit ohne     *)
  58.                                   (* Bremswirkung                        *)
  59. END;
  60.  
  61. PROCEDURE tBike.Stop;
  62. BEGIN
  63.   v:=v+Brake;                    (* Von der idealen Geschwindigkeit wird *)
  64.                                  (* noch die Bremswirkung abgezogen      *)
  65.   WriteLn(Brake,' Stop-Faktor; ');   (* Brake ist kleiner gleich Null    *)
  66. END;
  67.  
  68. PROCEDURE tBike.Control;
  69. BEGIN
  70.   Go;                        (* In tBike.Control sitzt die Zentrale der  *)
  71.   Stop;                      (* Fortbewegung des Objekts tBike           *)
  72.   WriteLn(v, ' km/h.');
  73. END;
  74.  
  75. DESTRUCTOR tBike.Done;
  76. BEGIN             (* Hier wird anscheinend nichts getan, doch der Schein *)
  77.                   (* trⁿgt. Durch den Aufruf eines Destructors wird der  *)
  78. END;              (* Speicher der VMT automatisch wieder freigegeben     *)
  79.  
  80. CONSTRUCTOR tPlane.Init(Tempo, x1, y1, z1, Hi, Lo: WORD; Bremse: INTEGER);
  81. BEGIN
  82.   tBike.Init(Tempo, x1, y1, Bremse);
  83.   MaxSpeed := 1000;                 (* Maximale Geschwindigkeit           *)
  84.   Wheel := 3;                       (* Das Flugzeug soll drei RΣder haben *)
  85.   IF Tempo > MaxSpeed
  86.     THEN Speed := MaxSpeed
  87.   ELSE Speed := Tempo;         (* Kontrolle der erlaubten Geschwindigkeit *)
  88.   IF   Bremse > 0
  89.     THEN Brake := 0
  90.   ELSE Brake := Bremse;        (* Kontrolle der gewⁿnschten Bremswirkung  *)
  91.   z:= z1;
  92.   IF Hi > 44         (* Hier wird kontrolliert, ob die Werte fⁿr Auftrieb *)
  93.     THEN up:=44      (* und Abtrieb nicht dazu fⁿhren, da▀ unser Flugzeug *)
  94.   ELSE up:=Hi;       (* keinen Looping ausfⁿhrt                           *)
  95.   IF   Lo > 44
  96.     THEN down:=44
  97.   ELSE down:=Lo;
  98. END;
  99.  
  100. PROCEDURE tPlane.Go;
  101. BEGIN
  102.   v := v + Speed - up;               (* Zur Anfangsgeschwindigkeit kommt *)
  103.                                      (* die Antriebsgeschwindigkeit      *)
  104.   WriteLn(Speed, ' Go-Faktor; ');    (* hinzu, aber der Auftrieb bremst  *)
  105.                                      (* den Flug etwas                   *)
  106. END;
  107.  
  108. PROCEDURE tPlane.Stop;
  109. BEGIN
  110.   v := v + Brake - down;            (* Von idealen Geschwindigkeit mu▀   *)
  111.                                     (* die Bremswirkung abgezogen        *)
  112.   WriteLn(Brake,' Stop-Faktor; ');  (* werden, der Abtrieb beschleunigt  *)
  113.                                     (* aber wieder etwas                 *)
  114. END;
  115.  
  116. DESTRUCTOR tPlane.Done;
  117. BEGIN
  118.   WriteLn('Ein Flugzeug ist eben nichts anderes,'+
  119.           ' als ein erweitertes Fahrrad!');
  120. END;
  121.  
  122. END. (* of UNIT *)
  123.  
  124.  
  125.  
  126.