home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / PASCAL / HEJB / EXAM / DEMO.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-04-21  |  7.5 KB  |  248 lines

  1. { ********************* Program Demo *************************** }
  2. { * Sem jsem nacpal snad v¿echny t⌐ídy, co jsou v této sestavê.* }
  3. { Vytvo⌐í se spousta objektû a ty se nechají bêhat po obrazovce. }
  4.  
  5. uses
  6.   Crt, Obraz3D, Unhejb, Unkriz, Unobdel, Unvokno, Unfront, Unstrom, Untimer, Unjakrych;
  7.  
  8. const _Kriz             = 80;  { poçet k⌐íæû }
  9.       _Obdel            = 600; { poçet vokÿnek }
  10.       Sipka_Vpravo      = #77; { kódy kláves, kterÿmi se bude ovládat prodleva a odchod }
  11.       Sipka_Vlevo       = #75;
  12.       Esc               = #27;
  13.  
  14.  
  15. var Stuj    : array[1.._Obdel]of Typ_Line; { vokÿnka }
  16.     Krize   : array[1.._Kriz]of  Typ_Kriz; { k⌐íæe }
  17.     Sterac  : Typ_Vokynko;                 { ... }
  18.     Hvezda  : Typ_Hvezda;                  { ... }
  19.     Strom   : Vtyp_Strom;                  { ... }
  20.  
  21.     I, J    : Integer;
  22.     S       : string;
  23.  
  24.     _Bezkriz,                              { poçet bêhajících k⌐íæû a obdélníkû }
  25.     _Bezici : Integer;                     { urçuje se pozdêji podle vÿkonu poçítaçe }
  26.  
  27.     Moje_Fronta : Typ_Hejb_Fronta;         { fronta, do které se za⌐adí v¿echny hejbací objekty }
  28.  
  29.  
  30. const Koncit : Boolean = False;
  31. const _Delay : Integer = 15;
  32.  
  33.       { program, t⌐ída, objekt a jeho metoda kterÿmi se ⌐ídí prodleva p⌐i pohybu objektû }
  34. const Progdelay : array[1..3]of Typ_Instrukce = (Vm0, Jmpa0, Endc);
  35. type Typdelay = object(Typ_Hejbaci_Zaklad)
  36.                   procedure Vm0;virtual;
  37.                 end;
  38.  
  39. var Pdelay : Typdelay;
  40.  
  41. procedure Typdelay.Vm0;
  42. const Pompoc : Word = 0;
  43. var C : Char;
  44. begin
  45.   if KeyPressed then
  46.     begin
  47.       C := ReadKey;
  48.       if C = #27 then Koncit := True;
  49.         case C of
  50.           #0 : case ReadKey of
  51.                  Sipka_Vpravo : begin Inc(_Delay); if _Delay > 50  then _Delay := 50 end;
  52.                  Sipka_Vlevo  : begin Dec(_Delay); if _Delay <1 then _Delay := 1 end;
  53.                end;
  54.         end;
  55.       Sterac.GotoXY(9,1);
  56.       Sterac.Pisint(_Delay, 2);
  57.     end;
  58.   if Pompoc mod 10 = 0 then
  59.     begin
  60.       Sterac.set_Psaci_Barva(Pompoc div 10 mod 2*100+13);
  61.       Sterac.GotoXY(1,1);
  62.       Sterac.Pis('<-Delay ');
  63.       Sterac.Pisint(_Delay,2);
  64.       Sterac.Pis('ms->');
  65.       Sterac.GotoXY(70,1);
  66.       Sterac.Pis('ESC - ven');
  67.     end;
  68.   Inc(Pompoc);
  69. end;
  70.     { çty⌐i programy pro pohyb objektû }
  71. const Cesta1 : array[1..42]of Typ_Instrukce =
  72.  (R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,D,D,D,D,
  73.   L,L,L,L,L,L,L,L,L,L,U,U,U,U,U,U,U,U,U,U,Jmpa0,Endc);
  74.       Cesta2 : array[1..34]of Typ_Instrukce=
  75.  (_B,_B,D,_B,D,_B,D,D,D,D,
  76.   _F,D,_F,D,_F,_F,_F,_F,U,_F,
  77.   U,_F,U,U,U,U,_B,U,_B,U,
  78.   _B,_B,Jmpa0,Endc);
  79.       Cesta3 : array[1..22]of Typ_Instrukce=
  80.  (Lu,L+U,L,L,Ld,Ld,D,D,D,D,Rd,Rd,R,R,Ru,Ru,U,U,U,U,Jmpa0,Endc);
  81.       Cesta4 : array[1..82] of Byte =
  82.  (D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
  83.   D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
  84.   U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,
  85.   U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,Jmpa0,Endc);
  86.     { hvêzda má ov¿em zvlá¿tní program }
  87. const Cestahv : array[1..172]of Typ_Instrukce=
  88.    ( R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
  89.      R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
  90.      R,R,R,R,R,R,R,R,R,R,Rep,2,Vm1,
  91.      R,R,R,R,R,R,R,R,R,R,Rep,2,Vm0,
  92.      R,R,R,R,R,R,R,R,R,R,
  93.      D,D,D,D,D,D,D,D,D,D,Rep,2,Vm1,
  94.      D,D,D,D,D,D,D,D,D,D,
  95.      L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
  96.      L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
  97.      L,L,L,L,L,L,L,L,L,L,Rep,2,Vm1,
  98.      L,L,L,L,L,L,L,L,L,L,Rep,2,Vm0,
  99.      L,L,L,L,L,L,L,L,L,L,
  100.      U,U,U,U,U,U,U,U,U,U,Rep,2,Vm1,
  101.      U,U,U,U,U,U,U,U,U,U,
  102.      Jmpa0, Endc);
  103.     { a stomeçek taky }
  104.      Cestastr : array[1..162]of Typ_Instrukce =
  105.    ( R,R,R,R,R,R,R,R,R,R,_B,_B,
  106.      R,R,R,R,R,R,R,R,R,R,_B,_B,
  107.      R,R,R,R,R,R,R,R,R,R,_F,_F,
  108.      R,R,R,R,R,R,R,R,R,R,_F,_F,
  109.      R,R,R,R,R,R,R,R,R,R,_F,_F,
  110.      D,D,D,D,D,D,D,D,D,D,
  111.      D,D,D,D,D,D,D,D,D,D,
  112.      L,L,L,L,L,_B,L,L,L,L,L,_B,
  113.      L,L,L,L,L,_B,L,L,L,L,L,_B,
  114.      L,L,L,L,L,_B,L,L,L,L,L,_B,
  115.      L,L,L,L,L,L,L,L,L,L,_F,_F,
  116.      L,L,L,L,L,L,L,L,L,L,_F,_F,
  117.      U,U,U,U,U,U,U,U,U,U,
  118.      U,U,U,U,U,U,U,U,U,U,
  119.      Jmpa0, Endc);
  120.  
  121. begin
  122.   Randomize;
  123.  
  124.   Obrazovka.Nastav_mod(3+__Sada_3D_8X8);
  125.  
  126.   Moje_Fronta.Init;
  127.  
  128.   Sterac.Init;
  129.   Sterac.Vytvor_Ram(80,3, 11, 11, Strom_Ram);
  130.   Sterac.presun(0,0,6);
  131.   Sterac.GotoXY(1,1);
  132.   Sterac.set_Psaci_Barva(15);
  133.   Sterac.Pis(
  134. '                          Já jsem stêraç stêrací                              ');
  135.   Sterac.Zobraz;
  136.   Sterac.Hejbej(Cesta4);
  137.   Sterac.set_Pomalost(5);
  138.   Moje_Fronta.Zarad_Prvek(Sterac);
  139.  
  140.   Hvezda.Init;
  141.   Hvezda.Presun(15,15,10);
  142.   Hvezda.Vytvor(2,13,'*');
  143.   Hvezda.Zobraz;
  144.   Hvezda.Hejbej(Cestahv);
  145.   Moje_Fronta.Zarad_Prvek(Hvezda);
  146.   Hvezda.set_Pomalost(0);
  147.  
  148.      { toto se tÿçe stromeçku, zinicializuje se, nastrká se do nêj }
  149.      { animovanê 20 prvkû a po¿le se na cestu }
  150.   set_Velikost(0.5);
  151.   set_Pocatek_Animace(15, 10, 10);
  152.   Strom.Init;
  153.   Strom.Presun(8-7,10+7,7);
  154.     for I := 1 to 20 do
  155.     begin
  156.       set_Pomalost(21-I);
  157.       Strom.Vanim_Insert(Random(200));
  158.     end;
  159.   Strom.Hejbej(Cestastr);
  160.   Moje_Fronta.Zarad_Prvek(Strom);
  161.   Strom.set_Pomalost(2);
  162.  
  163.    { tady se n2jak inicializují obdélníky a k⌐íæe }
  164.   for I:=1 to _Obdel do { inicialisace obdelníkû }
  165.     begin
  166.       Stuj[I].Init;
  167.       Stuj[I].Presun( Random(60)+9, Random(35)+4, (I mod 7)*2-4);
  168.       for J:=1 to I div 300+1 do S[J] := Chr(I+48);
  169.       S[0] := Char(I div 300+1 );
  170.  
  171.       {$r-}
  172.       J := Random(10)-5;
  173.       Stuj[I].Vytvor_string_Ram(S, I mod 15+1,I mod 15+1, Strom_Ram);
  174.       {$r+}
  175.       Stuj[I].Zobraz;
  176.     end;
  177.  
  178.   for I := 1 to _Kriz do { inicialisace k⌐íæû }
  179.     begin
  180.       {$r-}
  181.        Krize[I].Init;
  182.        Krize[I].Presun(Random(60), Random(35), Random(7)*2-4);
  183.       J := Random (10)-5;
  184.       {$r+}
  185.       Krize[I].Vytvor(Random(8)+2, I mod 15 +1, _Strom)
  186.       ;Krize[I].Zobraz;
  187.     end;
  188.     { Funkce Jakrych umí p⌐ibliænê zmê⌐it vÿkon poçítaçe }
  189.     { a pomocí ní se urçí, kolik toho bude bêhat. }
  190.     { Na DX4/100 toho bêhá docela hodnê. }
  191.   _Bezici  := Trunc(Sqrt(Jakrych)) div 5;
  192.   _Bezkriz := Trunc(Sqrt(Jakrych)) div 10;
  193.   WriteLn(_Bezici);
  194.   WriteLn(_Bezkriz);
  195.     { tohle je proto, aby náhodou nebêhaly i ty objekty, které neexistují }
  196.   if _Bezici  > _Obdel then _Bezici := _Obdel;
  197.   if _Bezkriz > _Kriz  then _Bezkriz := _Kriz;
  198.  
  199.     { No a teâ uæ se jen obdélníky a k⌐íæe po¿lou po svÿch cestách }
  200.   for I := 1 to _Bezici do
  201.     begin
  202.       case I mod 3 of
  203.         0 : Stuj[I].Hejbej(Cesta1);
  204.         1 : Stuj[I].Hejbej(Cesta2);
  205.         2 : Stuj[I].Hejbej(Cesta3);
  206.       end;
  207.       Moje_Fronta.Zarad_Prvek(Stuj[I]);
  208.       Stuj[I].set_Pomalost(I mod 5);
  209.       Moje_Fronta.Makej; Moje_Fronta.Makej;
  210.     end;
  211.  
  212.   for I := 1 to _Bezkriz do { rozhejbání k⌐íæû }
  213.     begin
  214.       case I mod 3 of
  215.         0 : Krize[I].Hejbej(Cesta1);
  216.         1 : Krize[I].Hejbej(Cesta2);
  217.         2 : Krize[I].Hejbej(Cesta3);
  218.       end;
  219.       Moje_Fronta.Zarad_Prvek(Krize[I]);
  220.       Krize[I].set_Pomalost(I mod 10);
  221.       Moje_Fronta.Makej; Moje_Fronta.Makej;
  222.     end;
  223.  
  224.     { Nastaví se parametry objektu, kterÿ ovládá a zároveñ zobrazuje prodlevu }
  225.     { (do objektu Sterac) a za⌐adí se do fronty çasovaçe }
  226.  
  227.   Pdelay.Init;
  228.   Pdelay.Hejbej(Progdelay);
  229.   __Timer.Zarad_Prvek(Pdelay);
  230.   __Timer.On;
  231.  
  232.   repeat
  233.     Moje_Fronta.Makej; { tohle zpûsobuje ve¿kerÿ pohyb na obrazovce }
  234.     Delay(_Delay);
  235.   until Koncit;
  236.  
  237.     { no a nakonec opêt likvidace ne⌐ádu }
  238.   __Timer.Zrus;
  239.   Pdelay.Zrus;
  240.  
  241.   Sterac.Zrus;
  242.   Moje_Fronta.Zrus;
  243.   Hvezda.Zrus;
  244.   for I := 1 to _Obdel do Stuj[I].Zrus;
  245.   for I := 1 to _Kriz  do Krize[I].Zrus;
  246.   Konec;
  247. end.
  248.