uses crt,graph,uspace; var l,px,py,dx,dy,cdr:integer; cerc:boolean; k:char; procedure elem(i,j:integer); var a,b,c,d:record x,y:integer;end; m,n:integer; begin for m:=1 to 2 do for n:=1 to 2 do begin a.x:=(2*(i-1)+((n+1)mod 2)+((m+1)mod 2))*2;a.y:=(2*(j-1)+((n+1)mod 2))*2; b.x:=(2*(i-1)+((m+1)mod 2)+(n mod 2))*2; b.y:=(2*(j-1)+(1+(n+1)mod 2))*2; c.x:=(2*(i-1)+(m+1)mod 2)*2+1; c.y:=(2*(j-1)+(n+1)mod 2)*2+1; d.x:=(2*(i-1)+n mod 2+((m+n)div 4)*2)*2; d.y:=(2*(j-1)+(m+n)-2)*2; line(a.x*l+px,a.y*l+py,b.x*l+px,b.y*l+py); line(c.x*l+px,c.y*l+py,d.x*l+px,d.y*l+py); end; if cerc then begin circle(px+(4*i)*l,py+(4*j-1)*l,l,getcolor); circle(px+(4*i-2)*l,py+(4*j-3)*l,l,getcolor); end; end; procedure inter(var d:integer;b,e:integer); var t:integer;w:word; begin if e<>b then begin if b>e then begin t:=b;b:=e;e:=t;end; w:=e-b; if(d>=e)then d:=(d-b)mod w+b; if(d<=b)then d:=(d-e)mod w+e; end else d:=0; end; begin init(6); randomize;cdr:=1; setcolor(random($ff)); l:=25;px:=0;py:=0; dx:=random(7)-3;dy:=random(7)-3; repeat repeat changepage; inc(cdr); inter(cdr,0,maxint); inter(dx,-4*l,4*l);inter(dy,-4*l,4*l); inc(px,dx);inc(py,dy); inter(px,-4*l,4*l);inter(py,-4*l,4*l); for i:=0 to mx div (l*4)+2 do for j:=0 to my div (l*4)+2 do elem(i,j); if cdr mod 1000=0 then begin setcolor(random($ff0)+$f);cerc:=random(2)=1;end; if cdr mod 300=0 then dx:=dx+random(5)-2; if cdr mod 300=150 then dy:=dy+random(5)-2; if cdr mod 500=25 then l:=l+random(l)-l div 2; outtextxy(2,2,'<'+tex(cdr)+'>'); until keypressed or not((dx<>0)or(dy<>0)); k:=readkey; case k of '+':inc(l);'-':dec(l);'s':readkey;'c':setcolor(random($fff));'o':cerc:=not cerc; #72:dy:=dy-1;#75:dx:=dx-1;#77:dx:=dx+1;#80:dy:=dy+1; end; Inter(l,my div 4,0); until k=#27; end.