uses crt,graph;
var gd,gm,x,y,r,c:integer;
procedure Krug(x,y,r,c:integer);{рисование круга}
begin
Setcolor(c);
Circle(x,y,r);
setfillstyle(1,c);
floodfill(x,y,c);
end;
procedure Dviz(x,y,r,c,xmx,ymx:integer);{движение по стрелкам}
var x1,y1:integer;
k:char;
move:boolean;
begin
move:=true;
repeat
if keypressed then{если нажата клаывиша}
begin
k:=readkey;{читаем ее код}
if k=#80 then{стрелка вниз}
begin
c:=14;{цвет желтый}
y1:=y;
x1:=x;
y:=y+5;{перемещаемся вниз}
move:=true;
if y>ymx-r then y:=y1;{низ экрана - стоп}
end;
if k=#72 then{тоже вверх}
begin
c:=9;
y1:=y;
x1:=x;
y:=y-5;
move:=true;
if y<r then y:=y1;{верхний край}
end;
if k=#77 then{тоже вправо}
begin
c:=7;
y1:=y;
x1:=x;
x:=x+5;
move:=true;
if x>xmx-r then x:=x1;
end;
if k=#75 then{влево}
begin
c:=2;
y1:=y;
x1:=x;
x:=x-5;
move:=true;
if x<r then x:=x1;
end;
end;
if move then{если получили исходные данные}
begin
Krug(x1,y1,r,c);{рисуем круг}
cleardevice;{очищаем экран}
Krug(x,y,r,c);{рисуем на новом месте}
move:=false;{очищаем ввод, ждем новых данных}
end;
until k=#27;{Esc- exit}
end;
begin
randomize;
gd:=detect;
Initgraph(gd,gm,'');
OutTextXY(200,20,'Uprawlenye strelkami, Vyhod-Esc');
OutTextXY(200,40,' Press Enter...');
readln;
r:=25;{радиус, можно и вводом задать}
x:=random(getmaxX-2*r+1)+r;{случайная точка на экране с учетом радиуса}
y:=random(getmaxY-2*r+1)+r;
c:=12;{начальный цвет-красный(яркий, можно темный=4)}
Krug(x,y,r,c);{}
Dviz(x,y,r,c,getmaxX,getmaxY);{}
closegraph
end.