const Memory = 150; var Line: array [1..Memory] of record LX1,LY1: integer; LX2,LY2: integer; LColor: integer; end; X1,X2,Y1,Y2, CurrentLine, ColorCount, IncrementCount, DeltaX1,DeltaY1,DeltaX2,DeltaY2, I,Color: integer; Ch: char; procedure Check; var Ch: char; begin writeln('This program will only work if you have the color graphics adapter installed'); write('Continue Y/N '); repeat read (Kbd,Ch) until Upcase(Ch) in ['Y','N']; if Upcase(Ch)='N' then Halt; end; procedure Init; begin for I:=1 to Memory do with Line[I] do begin LX1:=0; LX2:=0; LY1:=0; LY2:=0; end; X1:=0; Y1:=0; X2:=0; Y2:=0; CurrentLine:=1; ColorCount:=0; IncrementCount:=0; Ch:=' '; end; procedure AdjustX(var X,DeltaX: integer); var TestX: integer; begin TestX:=X+DeltaX; if (TestX<1) or (TestX>320) then begin TestX:=X; DeltaX:=-DeltaX; end; X:=TestX; end; procedure AdjustY(var Y,DeltaY: integer); var TestY: integer; begin TestY:=Y+DeltaY; if (TestY<1) or (TestY>190) then begin TestY:=Y; DeltaY:=-DeltaY; end; Y:=TestY; end; procedure SelectNewColor; begin Color:=Random(3)+1; ColorCount:=5*(1+Random(10)); end; procedure SelectNewDeltaValues; begin DeltaX1:=Random(7)-3; DeltaX2:=Random(7)-3; DeltaY1:=Random(7)-3; DeltaY2:=Random(7)-3; IncrementCount:=4*(1+Random(9)); end; procedure SaveCurrentLine; begin with Line[CurrentLine] do begin LX1:=X1; LY1:=Y1; LX2:=X2; LY2:=Y2; LColor:=Color; end; end; procedure Regenerate; var I: integer; begin NoSound; GraphColorMode; Palette(2); for I:=1 to Memory do with Line[I] do Draw(LX1,LY1,LX2,LY2,LColor); gotoxy(1,25); write('Press any key to continue, ESC to stop'); read(Kbd,Ch); end; begin Check; Init; GraphColorMode; Palette(2); Color:=2; gotoxy(1,25); write('Press any key to regenerate, ESC to stop'); repeat with Line[CurrentLine] do Draw(LX1,LY1,LX2,LY2,0); if ColorCount=0 then SelectNewColor; if IncrementCount=0 then SelectNewDeltaValues; AdjustX(X1,DeltaX1); AdjustX(X2,DeltaX2); AdjustY(Y1,DeltaY1); AdjustY(Y2,DeltaY2); Draw(X1,Y1,X2,Y2,Color); SaveCurrentLine; CurrentLine:=Succ(CurrentLine); if CurrentLine>Memory then CurrentLine:=1; ColorCount:=Pred(ColorCount); IncrementCount:=Pred(IncrementCount); if KeyPressed then begin read(Kbd,Ch); if Ch<>#27 then begin Regenerate; gotoxy(1,25); write('Press any key to regenerate, ESC to stop'); end; end; until Ch=#27; TextMode; end.