Тема зародилась Задачник по ООП, а это ее продолжения. Вот структура того, что я написал (измененная)
1 TGObject -// движущейся графический объект, умеет: // - инитиализировать себя constructor init(speed,color:byte; angle,time:real); // - двигаться procedure moveto; //- высчитывать свое новое положение, перекрывается в наследниках procedure calculation; virtual; //abstract; //- вызывается с Supervisor, только в случае столкновения. // Меняем скорость и угол полета. procedure ChangeDirection(speed:byte; angle:real); // рисуем себя, перекрывается в наследниках procedure show; virtual; // abstract; // стираем себя, перекрывается в наследниках procedure hide; virtual; // abstract; // стирает себя с экрана destructor done; virtual;
2 TBall - наследник TGObject, теперь это движущейся шарик // - добавили новое поле r -радиус, инициализацию остальных полей наследуем constructor init(x,y:integer; speed,color:byte; angle,time:real; r:byte); procedure moveto;// перекрываем, наслудуем procedure calculation; virtual;// перекрываем procedure show; virtual; // тоже перекрываем procedure hide; virtual; // тоже перекрываем destructor done; virtual; // перекрываем, наслудуем
3 TItem - элемент списка указателей на объекты TBall // инициализирует свою информационную часть constructor constructor init(Info:TPGObject; Sled:TPItem); destructor done;// удаляем информационную часть
4 TList - содержит список указателей на объеты типа TBall constructor init;//-инициализирует список function AddItem(Data:TPGObject):boolean; // добавляем новый элемент function DeleteItem(pdel:TPItem):boolean; // удаляем элемент destructor done;//удаляем весь список
Исходники в виде модулей для FPC - Balls.rar ( 15.06 килобайт )
Кол-во скачиваний: 501
Возникли затруднения в написания модуля TSupervisor, а именно с главным циклом и наследием этого объекта. Вот, что я написал
{------------------------TSupervisor------------------} type TPSuperVisor=^TSuperVisor; TSuperVisor=object GObjectsList:TList; Rect:TRect; constructor init(xa,ya,xb,yb:integer); function AddGObject(p:TPGObject):boolean; function DeleteGObject(p:TPGObject):boolean; function ChangeDirection; function Calculation; function WriteResults; procedure main; destructor done; end; constructor TSuperVisor.init; begin GObjectsList.init; Rect.assign(xa,ya,xb,yb); SetColor(white); Rectangle(xa,ya,xb,yb); end;
function TSuperVisor.AddGObject(p:TPGObject); begin AddGObject:=GObjectsList.AddItem(p); end;
function TSuperVisor.DeleteGObject(p:TPGObject):boolean; begin DeleteTPGObject:=GObjectsList.DeleteItem(p); end;
procedure TSuperVisor.main; begin end;
destructor TSuperVisor.done; begin GObjectsList.done; ClearDevice; end;
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.