home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / oop / tbike.pas next >
Pascal/Delphi Source File  |  1993-06-07  |  6KB  |  135 lines

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