program lab2;
uses crt,graph;
const p=0.08;
type square=record
x1,y1,x2,y2,x3,y3,x4,y4:integer;
end;
matr=array[1..20,1..40] of square;
//создадим матрицу квадратов
procedure CreateMatr(r,c,k1:byte;var a:matr);
var i,j:byte;
begin
for i:=1 to r do
for j:=1 to c do
begin
a[i,j].x1:=i*k1;a[i,j].y1:=j*k1;
a[i,j].x2:=(i+1)*k1;a[i,j].y2:=j*k1;
a[i,j].x3:=(i+1)*k1;a[i,j].y3:=(j+1)*k1;
a[i,j].x4:=i*k1;a[i,j].y4:=(j+1)*k1;
end;
end;
//прорисовка 1 квадрата
procedure DrawEl(s:square); {прорисовка квадрата}
begin
setcolor(5); line(s.x1,s.y1,s.x2,s.y2);
setcolor(9); line(s.x2,s.y2,s.x3,s.y3);
setcolor(13); line(s.x3,s.y3,s.x4,s.y4);
setcolor(1); line(s.x4,s.y4,s.x1,s.y1);
end;
//прорисовка матрицы
procedure DrawMatr(r,c:integer;var a:matr);
var i,j:byte;
begin
for i:=1 to r do
for j:=1 to c do
DrawEl(a[i,j]);
end;
procedure ToRight(var s:square); {квадрат крутится вправо}
begin
s.y1:=s.y1+round((s.y2-s.y1)*p); s.x1:=s.x1+round((s.x2-s.x1)*p);
s.y2:=s.y2+round((s.y3-s.y2)*p); s.x2:=s.x2+round((s.x3-s.x2)*p);
s.y3:=s.y3-round((s.y3-s.y4)*p); s.x3:=s.x3-round((s.x3-s.x4)*p);
s.y4:=s.y4-round((s.y4-s.y1)*p); s.x4:=s.x4-round((s.x4-s.x1)*p);
end;
procedure ToLeft(var s:square); {квадрат крутится влево}
begin
s.y1:=s.y1+round((s.y4-s.y1)*p); s.x1:=s.x1+round((s.x4-s.x1)*p);
s.y2:=s.y2-round((s.y2-s.y1)*p); s.x2:=s.x2-round((s.x2-s.x1)*p);
s.y3:=s.y3-round((s.y3-s.y2)*p); s.x3:=s.x3-round((s.x3-s.x2)*p);
s.y4:=s.y4+round((s.y3-s.y4)*p); s.x4:=s.x4+round((s.x3-s.x4)*p);
end;
{MainProg}
var m:matr;
bx,by,k1,gd,gm:integer;
k,i,j,n,r,c:byte;{n-кол. квадратов,r-rows,c-cols}
choice:char;{для запроса}
begin
writeln('Настройки по умолчанию или нет (y/n)');
readln(choice);
case choice of
'y':begin
r:=2;
c:=3;
n:=50;
k1:=50;
bx:=10;
by:=10;
end;
'n':begin
writeln('Сколько раз прорисовывать квадрат?');
readln(n);
writeln('Введите кол. строк и кол. квадратов в строке');
readln(r,c);
writeln('Введите начальные координаты x и y и длину стороны квадрата');
readln(bx,by,k1);
end;
else
begin
writeln('Неправильный выбор');
readln;
halt;
end;
end;{case}
gd:=0;
initgraph(gd,gm,'d:\bp\bgi');
CreateMatr(r,c,k1,m);//создаем
DrawMatr(r,c,m);//выводим начальные квадраты
for k:=1 to n-1 do
begin
delay(60);//задержка, у тебя 6000
for i:=1 to r do
for j:=1 to c do
if odd(i) then ToRight(m[i,j])/нове координаты
else ToLeft(m[i,j]);
DrawMatr(r,c,m);//рисуем
end;
readln
end.