Симпотишно
Насчёт о-файлов - по-простому это промежуточные скампилированные, но ещё не слинкованные части программы. Тоесть каждый модуль сначала компилируеться вот в такой "объектный" файл, а затем из таких файлов линкер собирает конечную программу. Тоесть нет необходимости распространять их с программой
Насчёт столкновения шаров вот можеш взять примерную такую функцию (тоже из одного старого эксперимента - вот совпадение
):
- Код: Выделить всё
type
TSome2DVector=record
x,y:integer;
end;
function phxlCollideCircles(x1,y1,x2,y2,r1,r2:integer;out vec:TSome2DVector):boolean;
var dx,dy,real_dist,ddist:integer;
begin
dx:=x1-x2;
dy:=y1-y2;
real_dist:=round(sqrt(dx*dx+dy*dy));
result:=real_dist<(r1+r2);
if real_dist>0.00001 then
begin
dx:=round(dx/real_dist);
dy:=round(dy/real_dist);
end;
ddist:=real_dist-(r1+r2);
vec.x:=dx*ddist;
vec.y:=dy*ddist;
end;
В неё надо передавать координаты центров двух кругов (x1,y1,x2,y2) и ихние радиусы (r1,r2). В итоге она возвращает true если круги накладываються один на другой, а в выходной нараметр vec записывает вектор силы отталкивания, который будет действовать на круги. Если сделать каждый круг объектом (или хотябы record-ом) с такими полями как скорость по х и скорость по у, и в каждом кадре анимации проверять их все на столкновения и изменять эти поля в соответсвии с выходным параметром vec, то поидее получится то что ты хочеш...
А вот сам эксперимент (как всё должно выглядеть) в аттаче (код опять весьма муторный, но думаю общий принцип будет понятен):