home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
pascal
/
das_buch
/
oop
/
tbike.pas
next >
Wrap
Pascal/Delphi Source File
|
1993-06-07
|
6KB
|
135 lines
(* PROGRAMM: TPLANE.PAS *)
(* by Michael Starke *)
PROGRAM FahrFlugzeugRad;
TYPE
tBike = OBJECT (* Definition des Urobjekts Fahrrad *)
v : WORD; (* Geschwindigkeit *)
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; VIRTUAL;
DESTRUCTOR Done; VIRTUAL; (* Gibt den Speicher der VMT wieder frei *)
END;
CONSTRUCTOR tBike.Init(Tempo, x1, y1: WORD; Bremse: INTEGER);
BEGIN
MaxSpeed := 100; (* Hier werden die Werte fⁿr die maximale *)
(* Geschwindigkeit, *)
Wheel := 2; (* die 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 Fortbewegung des *)
Stop; (* 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 Speicher der *)
END; (* VMT automatisch wieder freigegeben *)
TYPE
tPlane = OBJECT (tBike)
z : WORD; (* tPlane definiert weitere Felder: *)
(* Z fⁿr die H÷henkorrdinate 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; (* Berechnug der Bremswirkung *)
DESTRUCTOR Done; VIRTUAL;
END;
CONSTRUCTOR tPlane.Init(Tempo, x1, y1, z1, Hi, Lo: WORD; Bremse: INTEGER);
BEGIN
tBike.Init(Tempo, x1, y1, Bremse);
MaxSpeed := 1000; (* Maximale Gescwindigkeit *)
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 und Abtrieb nicht dazu *)
THEN up := 44 (* 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;
VAR
MyPlane: tPlane; (* Damit ⁿberhaupt etwas passiert, ben÷tigen Sie eine *)
(* Instanz vom Typ des Objekts *)
BEGIN
WITH MyPlane DO
BEGIN
WriteLn;
Init(1000, 1, 1, 1, 44, 0, 0); (* tPlane.Init *)
Control; (* tBike.Control ruft tPlane.Go *)
(* und tPlane.Stop *)
Done; (* tPlane.Done *)
END; (* END of WITH *)
END. (* END of program *)