|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 15360 (0x3c00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Solide, seg_05c1ae
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Gen; use Gen; with Maitre; with Cellule; with Services; with Mon_Terminal; package body Solide is No_Solide : Integer := 0; type Enfant (Genre : Gen.Tgenre := Gen.Non_Objet) is record case Genre is when Gen.Asteroide => O_A : Asteroide.Objet; when Gen.Tir => O_T : Tir.Objet; when Gen.Base => O_B : Base.Objet; when Gen.Vaisseau => O_V : Vaisseau.Objet; when Gen.Non_Objet => null; end case; end record; type Internal is record Ma_Cellule : Cellule.Objet; Energie : Gen.Tenergie; Figure : Character; X : Gen.Tcoordonnees; Mon_Enfant : Enfant; end record; procedure Afficher_Energie (De : in Objet) is begin for T in 1 .. Maitre.Dernier_Term loop Maitre.Ecrire (S => " ", X => De.X, Y => Maitre.Last_Y, T => T); Maitre.Ecrire (S => De.Figure & ": " & Gen.Tenergie'Image (De.Energie), X => De.X, Y => Maitre.Last_Y, T => T); end loop; end Afficher_Energie; function Creer (Mon_Enfant : in Enfant; Position : in Gen.Tposition; Energie : in Gen.Tenergie; Figure : Character) return Objet is Loc_Solide : Objet := new Internal; begin Loc_Solide.Ma_Cellule := Cellule.Creer (Pour => Loc_Solide, Position => Position); Loc_Solide.Energie := Energie; Loc_Solide.Figure := Figure; Loc_Solide.Mon_Enfant := Mon_Enfant; Cellule.Entrer (La_Cellule => Loc_Solide.Ma_Cellule, Position => Position); if Mon_Enfant.Genre = Gen.Vaisseau then No_Solide := No_Solide + 1; Loc_Solide.X := No_Solide * 8; Afficher_Energie (De => Loc_Solide); elsif Mon_Enfant.Genre = Gen.Base then No_Solide := No_Solide + 1; Loc_Solide.X := 1; Afficher_Energie (De => Loc_Solide); end if; return Loc_Solide; end Creer; function Creer (Un_Solide : in Vaisseau.Objet; Position : in Gen.Tposition; Energie : in Gen.Tenergie; Figure : in Character) return Objet is Mon_Enfant : Enfant (Genre => Gen.Vaisseau); begin Mon_Enfant.O_V := Un_Solide; return Creer (Position => Position, Energie => Energie, Figure => Figure, Mon_Enfant => Mon_Enfant); end Creer; function Creer (Un_Solide : in Asteroide.Objet; Position : in Gen.Tposition; Energie : in Gen.Tenergie; Figure : in Character) return Objet is Mon_Enfant : Enfant (Genre => Gen.Asteroide); begin Mon_Enfant.O_A := Un_Solide; return Creer (Position => Position, Energie => Energie, Figure => Figure, Mon_Enfant => Mon_Enfant); end Creer; function Creer (Un_Solide : in Tir.Objet; Position : in Gen.Tposition; Energie : in Gen.Tenergie; Figure : in Character) return Objet is Mon_Enfant : Enfant (Genre => Gen.Tir); begin Mon_Enfant.O_T := Un_Solide; return Creer (Position => Position, Energie => Energie, Figure => Figure, Mon_Enfant => Mon_Enfant); end Creer; function Creer (Un_Solide : in Base.Objet; Position : in Gen.Tposition; Energie : in Gen.Tenergie; Figure : in Character) return Objet is Mon_Enfant : Enfant (Genre => Gen.Base); begin Mon_Enfant.O_B := Un_Solide; return Creer (Position => Position, Energie => Energie, Figure => Figure, Mon_Enfant => Mon_Enfant); end Creer; procedure Modifier (Le_Solide : in Objet; Position : in Gen.Tposition) is begin Cellule.Quitter (La_Cellule => Le_Solide.Ma_Cellule); Cellule.Entrer (La_Cellule => Le_Solide.Ma_Cellule, Position => Position); end Modifier; procedure Deplacer (Le_Solide : in Objet; Sens : in Gen.Tsens; Limites : in Boolean := False; Limite : out Boolean; Tiers : out Gen.Tgenre; Position : out Gen.Tposition) is Loc_Collision : Gen.Tgenre := Gen.Non_Objet; Loc_Position : Gen.Tposition := Cellule.Position (Le_Solide.Ma_Cellule); Hors_Ecran : Boolean; Autre_Solide : Objet; begin Cellule.Quitter (La_Cellule => Le_Solide.Ma_Cellule); Services.Calculer (Position => Loc_Position, Sens => Sens, Hors_Ecran => Hors_Ecran); if Limites and Hors_Ecran then Limite := True; else Limite := False; Cellule.Entrer (La_Cellule => Le_Solide.Ma_Cellule, Position => Loc_Position); Autre_Solide := Cellule.Collision (Le_Solide.Ma_Cellule); if Autre_Solide = null then Loc_Collision := Gen.Non_Objet; else Loc_Collision := Autre_Solide.Mon_Enfant.Genre; end if; end if; Tiers := Loc_Collision; Position := Loc_Position; end Deplacer; function Non_Solide return Objet is begin return null; end Non_Solide; procedure Deplacer (Le_Solide : in Objet; Sens : in Gen.Tsens; Tiers : out Gen.Tgenre; Position : out Gen.Tposition) is Limite : Boolean; begin Deplacer (Le_Solide => Le_Solide, Sens => Sens, Limites => False, Limite => Limite, Tiers => Tiers, Position => Position); end Deplacer; procedure Deplacer_Limite (Le_Solide : in Objet; Sens : in Gen.Tsens; Limite : out Boolean; Tiers : out Gen.Tgenre; Position : out Gen.Tposition) is begin Deplacer (Le_Solide => Le_Solide, Sens => Sens, Limites => True, Limite => Limite, Tiers => Tiers, Position => Position); end Deplacer_Limite; procedure Doper (Le_Solide : in Objet; Energie : in Gen.Tenergie) is begin if Gen.Tenergie'Last - Le_Solide.Energie < Energie then Le_Solide.Energie := Gen.Tenergie'Last; else Le_Solide.Energie := Le_Solide.Energie + Energie; end if; Afficher_Energie (De => Le_Solide); end Doper; procedure Vider (Le_Solide : in Objet; Energie : in Gen.Tenergie) is begin if Le_Solide.Energie < Energie then Le_Solide.Energie := Gen.Tenergie'First; else Le_Solide.Energie := Le_Solide.Energie - Energie; end if; Afficher_Energie (De => Le_Solide); end Vider; function Vide (Le_Solide : in Objet) return Boolean is begin if Le_Solide.Energie = Gen.Tenergie'First then return True; else return False; end if; end Vide; function Position (Le_Solide : in Objet) return Gen.Tposition is begin return Cellule.Position (Le_Solide.Ma_Cellule); end Position; function Prendre (Position : Gen.Tposition) return Asteroide.Objet is begin return Cellule.Prendre (Position => Position).Mon_Enfant.O_A; end Prendre; function Prendre (Position : Gen.Tposition) return Base.Objet is begin return Cellule.Prendre (Position => Position).Mon_Enfant.O_B; end Prendre; function Prendre (Position : Gen.Tposition) return Tir.Objet is begin return Cellule.Prendre (Position => Position).Mon_Enfant.O_T; end Prendre; function Prendre (Position : Gen.Tposition) return Vaisseau.Objet is begin return Cellule.Prendre (Position => Position).Mon_Enfant.O_V; end Prendre; procedure Afficher (Le_Solide : in Objet) is Blink : Boolean; begin if Le_Solide.Energie < Maitre.Alerte_Energie then Blink := True; else Blink := False; end if; Cellule.Afficher (La_Cellule => Le_Solide.Ma_Cellule, Figure => Le_Solide.Figure, Blink => Blink); end Afficher; procedure Detruire (Le_Solide : in out Objet) is begin Cellule.Detruire (La_Cellule => Le_Solide.Ma_Cellule); end Detruire; end Solide;
nblk1=e nid=e hdr6=1a [0x00] rec0=27 rec1=00 rec2=01 rec3=00c [0x01] rec0=16 rec1=00 rec2=06 rec3=04e [0x02] rec0=03 rec1=00 rec2=04 rec3=002 [0x03] rec0=19 rec1=00 rec2=0c rec3=05c [0x04] rec0=03 rec1=00 rec2=0d rec3=00e [0x05] rec0=19 rec1=00 rec2=08 rec3=056 [0x06] rec0=18 rec1=00 rec2=03 rec3=020 [0x07] rec0=1d rec1=00 rec2=0b rec3=014 [0x08] rec0=1a rec1=00 rec2=09 rec3=022 [0x09] rec0=1e rec1=00 rec2=02 rec3=00a [0x0a] rec0=03 rec1=00 rec2=0a rec3=000 [0x0b] rec0=1b rec1=00 rec2=05 rec3=004 [0x0c] rec0=0b rec1=00 rec2=07 rec3=000 [0x0d] rec0=0b rec1=00 rec2=07 rec3=000 tail 0x2176b68a889594210ea30 0x42a00088462060003 Free Block Chain: 0xe: 0000 00 00 00 04 80 01 20 01 02 03 04 05 06 20 20 20 ┆ ┆