Помогите, пожалуйста! Как сделать, чтобы шар не заходил за границы? Я суть понимаю, а как сделать - нет.
Задание такое: Изобразить на экране движение шара по бильярду без луз (первоначальное перемещение получить случайным образом).
Код:
uses Graph, Crt;
var
r,p:integer;
dx,dy,cdx,cdy,x,y:real;
dt:integer;
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
begin
grDriver := VGA;
grMode:=VGAHi;
grPath:='c:\bp\bgi';
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writeln('Ошибка инициализации графического режима');
writeln('Для завершения работы нажмите <Enter>');
readln;
Halt;
end;
randomize;
x:=105+random(400);
y:=115+random(200);
r:=10;
dx:=random(100)-50.5; cdx:=abs(dx)*0.01;
dy:=random(100)-50.5; cdy:=abs(dy)*0.01;
dt:=1650;
Setfillstyle(1,2);
bar(80,90,560,390);
repeat
Setfillstyle(1,0);bar(1,1,560,109);
Setfillstyle(1,0);bar(1,371,580,460);
Setfillstyle(1,0);bar(1,1,109,390);
Setfillstyle(1,0);bar(541,1,620,390);
x:=x+dx;y:=y+dy;
if (x>535)or(x<105) then dx:=-dx;
if (y>365)or(y<115) then dy:=-dy;
SetColor(0);
circle(round(x),round(y),r);
Delay(1900);
SetColor(2);
Circle(round(x),round(y),r);
dx:=dx-dx/abs(dx)*cdx;
dy:=dy-dy/abs(dy)*cdy;
until (keypressed)or(abs(dx)<=0.1)or(abs(dy)<=0.1);
SetColor(0);
Circle(round(x),round(y),r);
delay(50000);
CloseGraph;
end.