home *** CD-ROM | disk | FTP | other *** search
- (* Unit: TMOTION.PAS *)
- (* by Michael Starke *)
- UNIT tMotion;
-
- INTERFACE
-
- TYPE
- tBike = OBJECT (* Definition des Urobjekts Fahrrad *)
- v : WORD; (* Geschindigkeit *)
- Wheel : BYTE; (* Anzahl der RΣder *)
- MaxSpeed: WORD; (* Maximale Geschwindigkeit *)
- x, y : WORD; (* Die Fahrtrichtungskoordinaten *)
- Speed : WORD; (* Zu wΣhlende Antriebsgeschwindigkeit *)
- Brake : INTEGER; (* Bremswirkung *)
- CONSTRUCTOR Init(Tempo, x1, y1: WORD; Bremse: INTEGER);
- (* Initialisiert die VMT und die Felder des Objekt tBike *)
- PROCEDURE Go; VIRTUAL; (* Berechnug des Antriebs *)
- PROCEDURE Stop; VIRTUAL; (* Berechnung der Bremswirkung *)
- PROCEDURE Control; (* Zentrum der Fortbewegung *)
- DESTRUCTOR Done; VIRTUAL; (* Gibt den Speicher der VMT wieder frei *)
- END;
-
- tPlane = OBJECT (tBike)
- z : WORD; (* tPlane definiert weitere Felder: Z fⁿr die *)
- (* H÷henkoordinate und *)
- up, down: WORD; (* up und down fⁿr Auf- und Abtrieb *)
- CONSTRUCTOR Init(Tempo, x1, y1, z1, Hi, Lo: WORD; Bremse: INTEGER);
- PROCEDURE Go; VIRTUAL; (* Berechnung der Antriebsgeschwindigkeit *)
- PROCEDURE Stop; VIRTUAL; (* Berechnung der Bremswirkung *)
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- CONSTRUCTOR tBike.Init(Tempo, x1, y1: WORD; Bremse: INTEGER);
- BEGIN
- MaxSpeed := 100; (* Hier werden die Werte fⁿr die maximale *)
- (* Geschwindigkeit, *)
- Wheel := 2; (* Anzahl der RΣder des Objekt Fahrrad, *)
- x := x1; (* Fahrtrichtungskoordinate fⁿr die x-Richtung *)
- y := y1; (* Fahrtrichtungskoordinate fⁿr die y-Richtung *)
- v := 0; (* und die Endgeschwindigekit des Fahrrads berechnet *)
- IF Tempo > MaxSpeed
- THEN Speed := MaxSpeed
- ELSE Speed := Tempo; (* maximale Geschwindigkeit darf nicht *)
- (* ⁿberschritten werden *)
- IF Bremse > 0
- THEN Brake := 0
- ELSE Brake := Bremse; (* Negative Bremswirkung wird ebenfalls nicht *)
- (* zugelassen *)
- END;
-
- PROCEDURE tBike.Go;
- BEGIN
- v := v + Speed; (* Der Startwert fⁿr v (Null) plus die *)
- (* Antriebsgeschwindigkeit ergibt *)
- WriteLn(Speed, ' Go-Faktor; '); (* die ideale Geschwindigkeit ohne *)
- (* Bremswirkung *)
- END;
-
- PROCEDURE tBike.Stop;
- BEGIN
- v:=v+Brake; (* Von der idealen Geschwindigkeit wird *)
- (* noch die Bremswirkung abgezogen *)
- WriteLn(Brake,' Stop-Faktor; '); (* Brake ist kleiner gleich Null *)
- END;
-
- PROCEDURE tBike.Control;
- BEGIN
- Go; (* In tBike.Control sitzt die Zentrale der *)
- Stop; (* Fortbewegung des Objekts tBike *)
- WriteLn(v, ' km/h.');
- END;
-
- DESTRUCTOR tBike.Done;
- BEGIN (* Hier wird anscheinend nichts getan, doch der Schein *)
- (* trⁿgt. Durch den Aufruf eines Destructors wird der *)
- END; (* Speicher der VMT automatisch wieder freigegeben *)
-
- CONSTRUCTOR tPlane.Init(Tempo, x1, y1, z1, Hi, Lo: WORD; Bremse: INTEGER);
- BEGIN
- tBike.Init(Tempo, x1, y1, Bremse);
- MaxSpeed := 1000; (* Maximale Geschwindigkeit *)
- Wheel := 3; (* Das Flugzeug soll drei RΣder haben *)
- IF Tempo > MaxSpeed
- THEN Speed := MaxSpeed
- ELSE Speed := Tempo; (* Kontrolle der erlaubten Geschwindigkeit *)
- IF Bremse > 0
- THEN Brake := 0
- ELSE Brake := Bremse; (* Kontrolle der gewⁿnschten Bremswirkung *)
- z:= z1;
- IF Hi > 44 (* Hier wird kontrolliert, ob die Werte fⁿr Auftrieb *)
- THEN up:=44 (* und Abtrieb nicht dazu fⁿhren, da▀ unser Flugzeug *)
- ELSE up:=Hi; (* keinen Looping ausfⁿhrt *)
- IF Lo > 44
- THEN down:=44
- ELSE down:=Lo;
- END;
-
- PROCEDURE tPlane.Go;
- BEGIN
- v := v + Speed - up; (* Zur Anfangsgeschwindigkeit kommt *)
- (* die Antriebsgeschwindigkeit *)
- WriteLn(Speed, ' Go-Faktor; '); (* hinzu, aber der Auftrieb bremst *)
- (* den Flug etwas *)
- END;
-
- PROCEDURE tPlane.Stop;
- BEGIN
- v := v + Brake - down; (* Von idealen Geschwindigkeit mu▀ *)
- (* die Bremswirkung abgezogen *)
- WriteLn(Brake,' Stop-Faktor; '); (* werden, der Abtrieb beschleunigt *)
- (* aber wieder etwas *)
- END;
-
- DESTRUCTOR tPlane.Done;
- BEGIN
- WriteLn('Ein Flugzeug ist eben nichts anderes,'+
- ' als ein erweitertes Fahrrad!');
- END;
-
- END. (* of UNIT *)
-
-
-
-