home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 October / Chip_2000-10_cd1.bin / internet / Graviti / vlneni.exe / VLN2D2.PAS < prev    next >
Pascal/Delphi Source File  |  1999-08-22  |  5KB  |  209 lines

  1. Program vlneni2D; {Petr Frank (c) 1997 pro Turbo Pascal Dos 7.0 }
  2.  
  3. uses Objects,  Crt, Graph, Dos;
  4.  
  5.  type
  6.    TOscilatory = object
  7.      procedure PrepocitejSe( X, Z: word);
  8.       public
  9.        Rychlost,
  10.        PoziceY,
  11.        StaraPoziceY : Single;
  12.        PoziceX ,PoziceZ, SkutecnaPoziceZ: Integer;
  13.        Nulovy : Boolean;
  14.    end;
  15. const
  16.    pocetOscilatoruX = 95;
  17.    PocetOscilatoruZ = 95;
  18.    vzdalenostX = 2;
  19.    vzdalenostZ = 2;
  20.    BodX = 30;
  21.    BodZ = 30;
  22. {
  23.    BodX1 = pocetOscilatoruX-30;
  24.    BodZ1 = pocetOscilatoruz-30;
  25.  }
  26.    prirustky = 10;
  27.    tloustka = 1;
  28.    barva   =  1; {clBlue;}
  29.    nakloneni = 1;
  30.    tuhost   =  2.2;
  31.    Tlumeni = 1;
  32.    var
  33.   i: Word;
  34.   t: Integer;
  35.   pricitat : Byte;
  36.  Oscilatory: Array[0..PocetOscilatoruX+1,0..PocetOscilatoruZ+1] of ^Toscilatory;
  37.  
  38. type
  39.  typ_rastr=array [0..199,0..319] of byte;
  40.  
  41. var
  42.  rastr : typ_rastr absolute $A000:$0000;
  43.  
  44. var ch: char;
  45. var R1,R2,R3,R4: Single;
  46.  
  47. var
  48.  grDriver: Integer;
  49.  grMode: Integer;
  50.  ErrCode: Integer;
  51.  
  52. {$R *.DFM}
  53.  
  54. {-------------------------------------------}
  55. var m,k: word;
  56. procedure TOscilatory.PrepocitejSe(X,Z: Word);
  57.  begin
  58.  StaraPoziceY:=PoziceY;
  59.  R3:= Oscilatory[X+1,poziceZ]^.PoziceY - PoziceY;
  60.  R4:= Oscilatory[X,Z+1]^.PoziceY - PoziceY;
  61.  R1:= Oscilatory[X-1,Z]^.StaraPoziceY - PoziceY;
  62.  R2:= Oscilatory[X,Z-1]^.StaraPoziceY - PoziceY;
  63.  Rychlost:= Rychlost*Tlumeni + (R1 + R2 + R3 +R4) / Tuhost;
  64.  PoziceY := PoziceY + Rychlost;
  65.  
  66.  Rastr[ SkutecnaPoziceZ+ Round( StaraPoziceY), PoziceX ] := 0;
  67.  Rastr[ SkutecnaPoziceZ+ Round( PoziceY), PoziceX ] := 100;
  68. end;
  69.  
  70. {*******************************}
  71. procedure Aktivace;
  72. begin
  73.  for t:= 0 to PocetOscilatoruX+1 do
  74.    for i:= 0 to PocetOscilatoruZ+1 do
  75.     begin
  76.     New( Oscilatory[t,i] );
  77.     Oscilatory[t,i]^.StaraPoziceY:=0;
  78.     Oscilatory[t,i]^.PoziceX := t*vzdalenostX + i*Nakloneni-70;
  79.     Oscilatory[t,i]^.PoziceZ := i;
  80.     Oscilatory[t,i]^.PoziceY := 0;
  81.     Oscilatory[t,i]^.SkutecnaPoziceZ := -i * VzdalenostZ + 400;;
  82.     Oscilatory[t,i]^.Rychlost := 0;
  83.     Oscilatory[t,i]^.Nulovy := false;
  84.     end;
  85.  Oscilatory[BodX,BodZ]^.Nulovy := True;
  86.  
  87. { Oscilatory[BodX1,BodZ1]^.Nulovy := True;}
  88. {
  89.  Oscilatory[BodX1,BodZ1]^.Nulovy := True;
  90. }
  91.  {
  92.  For t:=0 to PocetOscilatoruZ do
  93.      Oscilatory[30,t]^.Nulovy := True;
  94.  For t:=40 to 44 do
  95.    Oscilatory[30,t]^.Nulovy := False;
  96.   }
  97. {
  98.  For t:=0 to 55 do
  99.      Oscilatory[t,BodZ+3]^.Nulovy := True;
  100.   For t:=0 to 55 do
  101.      Oscilatory[t,BodZ-3]^.Nulovy := True;
  102.  
  103.   }
  104.  end;
  105.  
  106. procedure Done;
  107. begin
  108.  for t:= 0 to PocetOscilatoruX+1 do
  109.    for i:= 0 to PocetOscilatoruZ+1 do
  110.     begin
  111.     Dispose( Oscilatory[t,i] );
  112.     end;
  113. end;
  114.  
  115. procedure Aktualizuj;
  116. var t: Integer;
  117.  begin
  118.    If Pricitat = 1 Then Oscilatory[BodX,BodZ]^.PoziceY:= Oscilatory[BodX,BodZ]^.PoziceY + prirustky;
  119.    If Pricitat = 2 Then Oscilatory[BodX,BodZ]^.PoziceY:= Oscilatory[BodX,BodZ]^.PoziceY - prirustky;
  120. { 2 bod}
  121.  
  122. {   If Pricitat = 1 Then Oscilatory[BodX1,BodZ1]^.PoziceY:= Oscilatory[BodX1,BodZ1]^.PoziceY + prirustky/4;
  123.    If Pricitat = 2 Then Oscilatory[BodX1,BodZ1]^.PoziceY:= Oscilatory[BodX1,BodZ1]^.PoziceY - prirustky/4;
  124.  }
  125.   For t:= 1 to PocetOscilatoruX do
  126.     for i:= 1 to PocetOscilatoruZ do
  127.          If not Oscilatory[t,i]^.nulovy Then Oscilatory[t,i]^.PrepocitejSe(t,i);
  128.  
  129.  end;
  130.  
  131. procedure ZmacklKlavesu;
  132. begin
  133.  {
  134.  If Pricitat = 1 Then Pricitat := 2 Else Pricitat := 1;
  135.   }
  136.  Pricitat :=0;
  137.  If Ord( ch ) = 80 then pricitat := 1;
  138.  If Ord( ch ) = 72 then pricitat := 2;
  139.  
  140. end;
  141.  
  142. Procedure InicializujGrafiku;
  143. begin
  144.  
  145.  Asm
  146.   MOV AH,00h
  147.   MOV AL,13h
  148.   INT 10h
  149.  End;
  150. {
  151.  GrDriver:=Detect;
  152.  }
  153. { InitGraph( GRdRIVER, grMode,'E:\BP\BIN');
  154.  
  155.  GrMode := InstallUserDriver('VGA256',nil);
  156. }
  157.  {InitGraph( GrDriver, GrMode, '');}
  158. { ErrCode := GraphResult;
  159.  if ErrCode <> grOk then
  160.     Writeln('Graphics error:', GraphErrorMsg(ErrCode));
  161. }
  162. end;
  163.  
  164. Procedure NakopniPaletu;
  165.  
  166.  type
  167.  policko=array[0..768] of byte;
  168.  
  169. Var
  170.  paleta :^policko;
  171.  regs:registers;
  172. begin
  173.   New(Paleta);
  174.   for i := 0 to 255 do
  175.     begin
  176.       paleta^[i*3+2]:=255;
  177.       paleta^[i*3+1]:=255;
  178.       paleta^[i*3+0]:=255;
  179.     end;
  180.       paleta^[2]:=0;
  181.       paleta^[1]:=0;
  182.       paleta^[0]:=0;
  183.  
  184.   regs.ah:=$10;
  185.   regs.al:=$12;
  186.   regs.bx:=0;
  187.   regs.cx:=256;
  188.   regs.es:=seg(paleta^);
  189.   regs.dx:=ofs(paleta^);
  190.   intr($10,regs);
  191.   dispose(paleta);
  192.  
  193. end;
  194.  
  195. begin
  196.  InicializujGrafiku;
  197.    NakopniPaletu;
  198.  Aktivace;
  199.  repeat
  200. {  repeat}
  201.   Aktualizuj;
  202. {  Until Keypressed;}
  203.   If keypressed then Ch:=Readkey;
  204.   ZmacklKlavesu;
  205.  until Ord(ch)=27;
  206.  CloseGraph;
  207.  Done;
  208. end.
  209.