Если ли такой для Паскаля? Или просто задачи...
P.S. ссылку на форум Задачи не давать...
1 TGObject -// движущейся графический объект, умеет:
constructor init(x,y:integer; speed,color:byte; angle,time:real);// - инитиализировать себя
procedure moveto;// - двигаться
procedure calculation; virtual; //abstract; //- высчитывать свое новое положение, перекрывается в наследниках
procedure ChangeDirection(speed:byte; angle:real); //- вызывается с Supervisor, только в случае столкновения. Меняем скорость и угол полета.
procedure draw(x,y:integer); virtual;// abstract; - перекрывается в наследниках
destructor done; virtual;// - стирает себя с экрана
2 TBall - наследник TGObject, теперь это движущейся шарик
constructor init(x,y:integer; speed,color:byte; angle,time:real; r:byte);// - добавили новое поле r -радиус, инициализацию остальных полей наследуем
procedure calculation; virtual;// перекрываем
procedure draw(x,y:integer); virtual;// тоже перекрываем
destructor done; virtual; // перекрываем, наслудуем
3 TItem - элемент списка указателей на объекты TBall
constructor init(pos_x,pos_y:integer; v,col:byte;angle,time:real; r:byte; p:TPItem);// инициализирует свою информационную часть
destructor done;// удаляем информационную часть
4 TList - содержит список указателей на объеты типа TBall
constructor init;//-инициализирует список
function AddItem(pos_x,pos_y:integer; v,col:byte; angle,time:real; r:byte):boolean;//добавляем новый элемент
function DeleteItem(pdel:TPitem):boolean;//удаляем элемент
destructor done;//удаляем весь список
Type
TType = ^TItem;
TItem = object ... end;
TList = object
procedure AddItem(X: TType);
end;
TGObject = Object(TType)
...
end;
PTBall = ^TBall;
TBall = Object(TGObject)
...
end;
Var L: Tlist;
...
L.AddItem(new(PTBall, init( ... )));
{ Но сами классы TItem/TList не имеют никакого понятия о параметрах конструктора TBall }
function collision(var obj_1, obj_2: TGObject): boolean;При реализации S_common тоже не надо будет ничего никуда добавлять - будут использоваться данные, уже и так хранящиеся в соотв. объектах (для круга - координаты центра и радиус, например)...
begin
{
находишь "пересечение фигур" - где-то видел реализацию,
могу попробовать найти ссылку: ищется фигура, представляющая
собой общую часть фигур Obj_1 и Obj_2 ...
Если полученная фигура НЕпуста, то есть или касание (площадь полученной
фигуры сопоставима с одним квадратным пикселом, если можно так выразиться)
или уже сильная авария (если общая площадь больше, но в этом случае ты должен
чаще производить проверки на касания)
}
collision := (S_common(Obj_1, Obj_2) > 0)
end;