71 lines
1.1 KiB
ObjectPascal
71 lines
1.1 KiB
ObjectPascal
// Пример из пакета KuMir/PMir
|
||
program Dragon;
|
||
|
||
uses GraphABC,Utils;
|
||
|
||
var
|
||
x := 200;
|
||
y := 150;
|
||
dx := 0;
|
||
dy := -4;
|
||
turn: array [1..1000] of Boolean;
|
||
|
||
begin
|
||
SetWindowSize(790,500);
|
||
Window.Title := 'Кривая Дракона';
|
||
var f := True;
|
||
for var a := 1 to 64 do
|
||
begin
|
||
turn[2*a-1] := f;
|
||
f := not f;
|
||
turn[2*a] := turn[a];
|
||
end;
|
||
var b := 0;
|
||
var d := 1;
|
||
f := false;
|
||
MoveTo(x,y);
|
||
|
||
for var a:=1 to 128 do
|
||
begin
|
||
var t: integer;
|
||
LockDrawing;
|
||
for var i:=1 to 127*4 do
|
||
begin
|
||
b += d;
|
||
x += dx;
|
||
y += dy;
|
||
LineTo(x,y);
|
||
if f and not turn[b] or not f and turn[b] then
|
||
begin
|
||
t := dy;
|
||
dy := -dx;
|
||
end
|
||
else
|
||
begin
|
||
t := -dy;
|
||
dy := dx;
|
||
end;
|
||
dx := t;
|
||
end;
|
||
b += d;
|
||
x += dx;
|
||
y += dy;
|
||
LineTo(x,y);
|
||
d := -d;
|
||
f := not f;
|
||
if turn[a] then
|
||
begin
|
||
t := dy;
|
||
dy := -dx;
|
||
end
|
||
else
|
||
begin
|
||
t := -dy;
|
||
dy := dx;
|
||
end;
|
||
dx := t;
|
||
UnLockDrawing;
|
||
end;
|
||
write('Время работы = ',Milliseconds/1000,' с');
|
||
end.
|