UNIT carre; INTERFACE FUNCTION delimite_carre(ncoul:word;var hx,hy:integer):boolean; IMPLEMENTATION uses crt,graph,soursime; FUNCTION delimite_carre(ncoul:word;var hx,hy:integer):boolean; {celui-ci marche impecable} var cest_fait:boolean; k:integer; oldcoul:word; image:array[1..800] of byte; Procedure avant; var i:integer; begin k:=1; hide; if hx<=xpos then for i:=hx to xpos do begin image[k]:=getpixel(i,hy); k:=k+1; image[k]:=getpixel(i,ypos); k:=k+1; end else for i:=hx downto xpos do begin image[k]:=getpixel(i,hy); k:=k+1; image[k]:=getpixel(i,ypos); k:=k+1; end; if hy<=ypos then for i:=hy to ypos do begin image[k]:=getpixel(hx,i); k:=k+1; image[k]:=getpixel(xpos,i); k:=k+1; end else for i:=hy downto ypos do begin image[k]:=getpixel(hx,i); k:=k+1; image[k]:=getpixel(xpos,i); k:=k+1; end; shows; end; Procedure apres; var i:integer; begin k:=1; hide; if hx<=oldx then for i:=hx to oldx do begin putpixel(i,hy,image[k]); k:=k+1; putpixel(i,oldy,image[k]); k:=k+1; end else for i:=hx downto oldx do begin putpixel(i,hy,image[k]); k:=k+1; putpixel(i,oldy,image[k]); k:=k+1; end; if hy<=oldy then for i:=hy to oldy do begin putpixel(hx,i,image[k]); k:=k+1; putpixel(oldx,i,image[k]); k:=k+1; end else for i:=hy downto oldy do begin putpixel(hx,i,image[k]); k:=k+1; putpixel(oldx,i,image[k]); k:=k+1; end; shows; end; begin oldcoul:=getcolor; setcolor(ncoul); cest_fait:=false; shows; repeat getstatus; if pressleft then begin hx:=xpos; {centre du carre} hy:=ypos; avant; while (pressleft or oldleft) do begin getstatus; cest_fait:=true; if (moved=true) then begin apres; avant; hide; rectangle(hx, hy, xpos, ypos); shows; end; end; end; until (cest_fait) or (pressright); if cest_fait then begin hide; apres; shows; delimite_carre:=true; end else delimite_carre:=false; setcolor(oldcoul); end; {delimite_carre, vrai si un cadre est trace} BEGIN END.