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