home *** CD-ROM | disk | FTP | other *** search
- { ********************* Program Demo *************************** }
- { * Sem jsem nacpal snad v¿echny t⌐ídy, co jsou v této sestavê.* }
- { Vytvo⌐í se spousta objektû a ty se nechají bêhat po obrazovce. }
-
- uses
- Crt, Obraz3D, Unhejb, Unkriz, Unobdel, Unvokno, Unfront, Unstrom, Untimer, Unjakrych;
-
- const _Kriz = 80; { poçet k⌐íæû }
- _Obdel = 600; { poçet vokÿnek }
- Sipka_Vpravo = #77; { kódy kláves, kterÿmi se bude ovládat prodleva a odchod }
- Sipka_Vlevo = #75;
- Esc = #27;
-
-
- var Stuj : array[1.._Obdel]of Typ_Line; { vokÿnka }
- Krize : array[1.._Kriz]of Typ_Kriz; { k⌐íæe }
- Sterac : Typ_Vokynko; { ... }
- Hvezda : Typ_Hvezda; { ... }
- Strom : Vtyp_Strom; { ... }
-
- I, J : Integer;
- S : string;
-
- _Bezkriz, { poçet bêhajících k⌐íæû a obdélníkû }
- _Bezici : Integer; { urçuje se pozdêji podle vÿkonu poçítaçe }
-
- Moje_Fronta : Typ_Hejb_Fronta; { fronta, do které se za⌐adí v¿echny hejbací objekty }
-
-
- const Koncit : Boolean = False;
- const _Delay : Integer = 15;
-
- { program, t⌐ída, objekt a jeho metoda kterÿmi se ⌐ídí prodleva p⌐i pohybu objektû }
- const Progdelay : array[1..3]of Typ_Instrukce = (Vm0, Jmpa0, Endc);
- type Typdelay = object(Typ_Hejbaci_Zaklad)
- procedure Vm0;virtual;
- end;
-
- var Pdelay : Typdelay;
-
- procedure Typdelay.Vm0;
- const Pompoc : Word = 0;
- var C : Char;
- begin
- if KeyPressed then
- begin
- C := ReadKey;
- if C = #27 then Koncit := True;
- case C of
- #0 : case ReadKey of
- Sipka_Vpravo : begin Inc(_Delay); if _Delay > 50 then _Delay := 50 end;
- Sipka_Vlevo : begin Dec(_Delay); if _Delay <1 then _Delay := 1 end;
- end;
- end;
- Sterac.GotoXY(9,1);
- Sterac.Pisint(_Delay, 2);
- end;
- if Pompoc mod 10 = 0 then
- begin
- Sterac.set_Psaci_Barva(Pompoc div 10 mod 2*100+13);
- Sterac.GotoXY(1,1);
- Sterac.Pis('<-Delay ');
- Sterac.Pisint(_Delay,2);
- Sterac.Pis('ms->');
- Sterac.GotoXY(70,1);
- Sterac.Pis('ESC - ven');
- end;
- Inc(Pompoc);
- end;
- { çty⌐i programy pro pohyb objektû }
- const Cesta1 : array[1..42]of Typ_Instrukce =
- (R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,D,D,D,D,
- L,L,L,L,L,L,L,L,L,L,U,U,U,U,U,U,U,U,U,U,Jmpa0,Endc);
- Cesta2 : array[1..34]of Typ_Instrukce=
- (_B,_B,D,_B,D,_B,D,D,D,D,
- _F,D,_F,D,_F,_F,_F,_F,U,_F,
- U,_F,U,U,U,U,_B,U,_B,U,
- _B,_B,Jmpa0,Endc);
- Cesta3 : array[1..22]of Typ_Instrukce=
- (Lu,L+U,L,L,Ld,Ld,D,D,D,D,Rd,Rd,R,R,Ru,Ru,U,U,U,U,Jmpa0,Endc);
- Cesta4 : array[1..82] of Byte =
- (D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
- D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
- U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,
- U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,Jmpa0,Endc);
- { hvêzda má ov¿em zvlá¿tní program }
- const Cestahv : array[1..172]of Typ_Instrukce=
- ( R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
- R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
- R,R,R,R,R,R,R,R,R,R,Rep,2,Vm1,
- R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
- R,R,R,R,R,R,R,R,R,R,
- D,D,D,D,D,D,D,D,D,D,Rep,2,Vm1,
- D,D,D,D,D,D,D,D,D,D,
- L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
- L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
- L,L,L,L,L,L,L,L,L,L,Rep,2,Vm1,
- L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
- L,L,L,L,L,L,L,L,L,L,
- U,U,U,U,U,U,U,U,U,U,Rep,2,Vm1,
- U,U,U,U,U,U,U,U,U,U,
- Jmpa0, Endc);
- { a stomeçek taky }
- Cestastr : array[1..162]of Typ_Instrukce =
- ( R,R,R,R,R,R,R,R,R,R,_B,_B,
- R,R,R,R,R,R,R,R,R,R,_B,_B,
- R,R,R,R,R,R,R,R,R,R,_F,_F,
- R,R,R,R,R,R,R,R,R,R,_F,_F,
- R,R,R,R,R,R,R,R,R,R,_F,_F,
- D,D,D,D,D,D,D,D,D,D,
- D,D,D,D,D,D,D,D,D,D,
- L,L,L,L,L,_B,L,L,L,L,L,_B,
- L,L,L,L,L,_B,L,L,L,L,L,_B,
- L,L,L,L,L,_B,L,L,L,L,L,_B,
- L,L,L,L,L,L,L,L,L,L,_F,_F,
- L,L,L,L,L,L,L,L,L,L,_F,_F,
- U,U,U,U,U,U,U,U,U,U,
- U,U,U,U,U,U,U,U,U,U,
- Jmpa0, Endc);
-
- begin
- Randomize;
-
- Obrazovka.Nastav_mod(3+__Sada_3D_8X8);
-
- Moje_Fronta.Init;
-
- Sterac.Init;
- Sterac.Vytvor_Ram(80,3, 11, 11, Strom_Ram);
- Sterac.presun(0,0,6);
- Sterac.GotoXY(1,1);
- Sterac.set_Psaci_Barva(15);
- Sterac.Pis(
- ' Já jsem stêraç stêrací ');
- Sterac.Zobraz;
- Sterac.Hejbej(Cesta4);
- Sterac.set_Pomalost(5);
- Moje_Fronta.Zarad_Prvek(Sterac);
-
- Hvezda.Init;
- Hvezda.Presun(15,15,10);
- Hvezda.Vytvor(2,13,'*');
- Hvezda.Zobraz;
- Hvezda.Hejbej(Cestahv);
- Moje_Fronta.Zarad_Prvek(Hvezda);
- Hvezda.set_Pomalost(0);
-
- { toto se tÿçe stromeçku, zinicializuje se, nastrká se do nêj }
- { animovanê 20 prvkû a po¿le se na cestu }
- set_Velikost(0.5);
- set_Pocatek_Animace(15, 10, 10);
- Strom.Init;
- Strom.Presun(8-7,10+7,7);
- for I := 1 to 20 do
- begin
- set_Pomalost(21-I);
- Strom.Vanim_Insert(Random(200));
- end;
- Strom.Hejbej(Cestastr);
- Moje_Fronta.Zarad_Prvek(Strom);
- Strom.set_Pomalost(2);
-
- { tady se n2jak inicializují obdélníky a k⌐íæe }
- for I:=1 to _Obdel do { inicialisace obdelníkû }
- begin
- Stuj[I].Init;
- Stuj[I].Presun( Random(60)+9, Random(35)+4, (I mod 7)*2-4);
- for J:=1 to I div 300+1 do S[J] := Chr(I+48);
- S[0] := Char(I div 300+1 );
-
- {$r-}
- J := Random(10)-5;
- Stuj[I].Vytvor_string_Ram(S, I mod 15+1,I mod 15+1, Strom_Ram);
- {$r+}
- Stuj[I].Zobraz;
- end;
-
- for I := 1 to _Kriz do { inicialisace k⌐íæû }
- begin
- {$r-}
- Krize[I].Init;
- Krize[I].Presun(Random(60), Random(35), Random(7)*2-4);
- J := Random (10)-5;
- {$r+}
- Krize[I].Vytvor(Random(8)+2, I mod 15 +1, _Strom)
- ;Krize[I].Zobraz;
- end;
- { Funkce Jakrych umí p⌐ibliænê zmê⌐it vÿkon poçítaçe }
- { a pomocí ní se urçí, kolik toho bude bêhat. }
- { Na DX4/100 toho bêhá docela hodnê. }
- _Bezici := Trunc(Sqrt(Jakrych)) div 5;
- _Bezkriz := Trunc(Sqrt(Jakrych)) div 10;
- WriteLn(_Bezici);
- WriteLn(_Bezkriz);
- { tohle je proto, aby náhodou nebêhaly i ty objekty, které neexistují }
- if _Bezici > _Obdel then _Bezici := _Obdel;
- if _Bezkriz > _Kriz then _Bezkriz := _Kriz;
-
- { No a teâ uæ se jen obdélníky a k⌐íæe po¿lou po svÿch cestách }
- for I := 1 to _Bezici do
- begin
- case I mod 3 of
- 0 : Stuj[I].Hejbej(Cesta1);
- 1 : Stuj[I].Hejbej(Cesta2);
- 2 : Stuj[I].Hejbej(Cesta3);
- end;
- Moje_Fronta.Zarad_Prvek(Stuj[I]);
- Stuj[I].set_Pomalost(I mod 5);
- Moje_Fronta.Makej; Moje_Fronta.Makej;
- end;
-
- for I := 1 to _Bezkriz do { rozhejbání k⌐íæû }
- begin
- case I mod 3 of
- 0 : Krize[I].Hejbej(Cesta1);
- 1 : Krize[I].Hejbej(Cesta2);
- 2 : Krize[I].Hejbej(Cesta3);
- end;
- Moje_Fronta.Zarad_Prvek(Krize[I]);
- Krize[I].set_Pomalost(I mod 10);
- Moje_Fronta.Makej; Moje_Fronta.Makej;
- end;
-
- { Nastaví se parametry objektu, kterÿ ovládá a zároveñ zobrazuje prodlevu }
- { (do objektu Sterac) a za⌐adí se do fronty çasovaçe }
-
- Pdelay.Init;
- Pdelay.Hejbej(Progdelay);
- __Timer.Zarad_Prvek(Pdelay);
- __Timer.On;
-
- repeat
- Moje_Fronta.Makej; { tohle zpûsobuje ve¿kerÿ pohyb na obrazovce }
- Delay(_Delay);
- until Koncit;
-
- { no a nakonec opêt likvidace ne⌐ádu }
- __Timer.Zrus;
- Pdelay.Zrus;
-
- Sterac.Zrus;
- Moje_Fronta.Zrus;
- Hvezda.Zrus;
- for I := 1 to _Obdel do Stuj[I].Zrus;
- for I := 1 to _Kriz do Krize[I].Zrus;
- Konec;
- end.
-