IPB
ЛогинПароль:

> Шарики, ООП
сообщение
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Тема зародилась Задачник по ООП, а это ее продолжения.
Вот структура того, что я написал (измененная)

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 килобайт ) Кол-во скачиваний: 500



Возникли затруднения в написания модуля TSupervisor, а именно с главным циклом и наследием этого объекта.
Вот, что я написал

uses objects,graphl,UnitTGObject,UnitList;
const
background=black;
ballcolor=red;


{------------------------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;



--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Т.е. при вызове ChangeDirection флажок изменения ставим в true, при вызове MoveTo - в false.
no1.gif Ты не понял... Еще раз перечитай... Флажок нужен, чтобы MoveTo (в смысле, пересчет координат) не вызывался еще раз после переноса указателя из одного списка в другой (при обработке второго списка), но ведь не только тот объект, который изменил направление, должен пересчитать координаты? Пересчитывать должны ВСЕ, но ни один не должен этого делать дважды...

Цитата
Т.е. при вызове ChangeDirection флажок изменения ставим в true
С этим согласен... После ChangeDirection устанавливаем флаг в True, и переносим объект в другой список... А вот сбрасывать надо именно так, как я показал - а не по MoveTo...

Цитата
Может тогда сделать четыре списка?
Надо подумать... У тебя тут угол, а не проекция Vx... Все-таки, скорее всего будет достаточно двух, и при нулевом Vx - проверять оба списка...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Bokul   Шарики   22.12.2006 5:44
volvo   Так... Ну, у меня после прочтения программы тоже ш…   22.12.2006 7:21
Bokul   :respect: :ROFL: :lol: Спасибо! Буду …   22.12.2006 7:25
volvo   :) Значит, так... По порядку: С такой реализацией…   22.12.2006 20:07
Bokul   Спасибо! :) Учел все замечания, исправил, из…   23.12.2006 6:33
volvo   А вот с этого места - поподробнее... Что это будут…   23.12.2006 7:19
Bokul   :lol: Думал наследием воспользоваться как инс…   23.12.2006 7:50
volvo   :no1: Совершенно не обязательно... Хочешь способ,…   23.12.2006 8:19
Bokul   Пересчет идет где? В TGObject? Для квадрата у…   23.12.2006 8:29
volvo   Зачем? Прямо в ComputeCollision - у тебя же …   23.12.2006 8:38
Bokul   Спасибо! :) Извиняюсь, что заставил себя жда…   24.12.2006 7:49
volvo   Понаблюдав чуть-чуть за шариками, можно увидеть си…   25.12.2006 1:43
volvo   Реализация TSupervisor осталась за кадром, ты не п…   24.12.2006 13:33
Bokul   Да я вроде все модули прикреплял :blink: , вот TSu…   24.12.2006 22:26
Bokul   Да ты - прав, выигрыш видно сразу, особенно ког…   25.12.2006 2:39
volvo   А именно - вот что (эту картинку я наблюдал сам): …   25.12.2006 2:59
Bokul   Не выходит спроектировать тоже самое (хотя, ког…   25.12.2006 4:09
volvo   Ты не забыл, что у каждого объекта есть вектор ско…   25.12.2006 4:40
Bokul   :yes2: Ты предлагаешь передавать объекту точк…   25.12.2006 5:16
volvo   Что-то обсуждение зацикливается... Я же написал те…   25.12.2006 5:59
Bokul   Ага, просто надо разобраться до конца и потом у…   25.12.2006 6:17
volvo   :blink: Var v, v1, v2: TVector; ... v := k * (k…   25.12.2006 6:29
Bokul   Мысли в слух: Ведь мы полностью не сможем скопиро…   26.12.2006 0:48
Bokul   Какие преимущества: больше не надо мучится со спос…   26.12.2006 1:01
volvo   Будет тормозить, конечно... Представь, что у тебя,…   26.12.2006 1:47
volvo   Сорри, ошибочка... Не будет работать для двух объе…   26.12.2006 1:59
Bokul   Уже сделано :) Правда я оставил угол L для совм…   26.12.2006 2:19
volvo   :no1: Ты не понял... Еще раз перечитай... Флажок …   26.12.2006 3:00
Bokul   Реализация Многоугольник окончена. Возник вопрос -…   31.12.2006 23:48


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 3:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name