program Matrix; uses crt; type datahad=record wait,start,delka,rychlost:byte; starting:byte; clanky:array[1..50]of byte; end; type pismenko=record { flags,wait:byte; prevpoint,endpoint,stpoint,nextpoint:byte; length,speed:byte;} hadi:array[1..10]of datahad; pocet:byte; end; var mscreen:array[1..80]of pismenko; console:array[0..3999]of byte; a,b,c:boolean; barva:byte; procedure InitOne(sloupek,had:byte); var i:byte; begin if mscreen[sloupek].pocet1 then dec(wait) else begin inc(start); wait:=rychlost; end; end; end; procedure spclmoves(sloupek:byte); var i:byte; begin with mscreen[sloupek] do begin for i:=1 to pocet do if hadi[i].start>(25+hadi[i].delka) then begin hadi[i]:=hadi[pocet]; dec(pocet); end; for i:=1 to pocet do moveone(sloupek,i); end; end; procedure moves(sloupek:byte); var i:byte; begin with mscreen[sloupek] do begin case random(500) of 0..20:for i:=1 to pocet do if hadi[i].start>(25+hadi[i].delka) then begin hadi[i]:=hadi[pocet]; dec(pocet); { initone(sloupek,i);} end; 21:if pocet<10 then initone(sloupek,pocet+1); end; for i:=1 to pocet do moveone(sloupek,i); end; end; procedure move; var i:byte; begin b:=true; for i:=1 to 80 do begin if a then spclmoves(i) else moves(i); if mscreen[i].pocet>0 then b:=false; end; end; procedure putXY(x,y:integer;charac,color:byte); var i:integer; begin if ((x<=80)and(y<=25))and((x>=1)and(y>=1)) then begin i:=(80*(y-1)+x-1)*2; console[i]:=charac; console[i+1]:=color; end; end; procedure draws(sloupek:byte); var i,j:integer; begin for j:=1 to mscreen[sloupek].pocet do with mscreen[sloupek].hadi[j] do begin putXY(sloupek,start,starting,lightgreen); for i:=1 to delka do putXY(sloupek,start-i,clanky[i],green); end; end; {$define bagr} procedure putonscreen; var i:integer; begin for i:=0 to 3999 do begin mem[$b800:i]:=console[i]; console[i]:=0; end; end; procedure draw; var i:byte; begin {$ifdef bagr} for i:=1 to 80 do draws(i); {$else} draws(5); {$endif} putonscreen; asm mov ah,10h; mov al,10h; mov bx,58; mov ch,63; mov cl,barva; mov dh,barva; int 10h; end; if barva=63 then c:=true; if barva=0 then c:=false; if c then barva:=barva-1 else barva:=barva+1; end; begin clrscr; randomize; init; a:=false; b:=false; c:=false; barva:=0; { asm mov ah,10h; mov al,10h; mov bx,2; mov ch,25; mov cl,0; mov dh,0; int 10h; end;} repeat move; draw; { delay(5);} until keypressed; a:=true; repeat move; draw; delay(5); until b; end.