![]() |
![]() |
Bokul |
![]()
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Тема зародилась Задачник по ООП, а это ее продолжения.
Вот структура того, что я написал (измененная)
Исходники в виде модулей для FPC - ![]() Возникли затруднения в написания модуля TSupervisor, а именно с главным циклом и наследием этого объекта. Вот, что я написал
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
Bokul |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Спасибо!
![]() Учел все замечания, исправил, извиняюсь что сам не отладил некоторые. ![]() Отказ от ненужных переменных oldx,oldy избавил от надобности переопределять метод moveto в объекте TBall. Также поставил в основной цикл отрисовку границ поля - без этого они затираются шариками. И чуточку изменил деструктор TSuperVisor-а - вместо ClearDevice используем такой способ:
Измененные модули вмести с SuperVisor - ![]() Цитата С такой реализацией списка тоже можно жить... Неудобно, правда, но ничего - это FPC, в конце концов - перегрузишь операторы - будет смотреться получше... Что ты имеешь ввиду? Может вместо списков использовать коллекции? Цитата несоответствие типов, копаться, чтобы исправить это я не стал, просто закомментировал вызов процедуры Да, надо изменить наfunction TSuperVisor.DeleteGObject(p:TPItem):boolean; Цитата т.к. не совсем понятно, почему при добавлении к списку функция AddItem получает указатель типа TPGObject, а при удалении DeleteItem требует указатель типа TPItem... Для инициализации звена списка, объект UnitItem должен знать свою информационную часть, и по-этому мы передаем ему переменную типа TPGObject, но потом, при работе с UnitList-ом для удаления своего элемента все, что он должен - это указатель на звено, а не информационную часть (ведь таких звеньев может быть несколько). Вот почему в DeleteGObject как передаваемый параметр я использую TPItem. Цитата /// Это - пока пустые функции, похоже, Calculation здесь вообще не нужна - // вычислениями будет заниматься конкретный объект, а не Наблюдатель Я тоже согласен оставить эти методы абстрактными в TSuperVisor и переопределять их в наследниках. По-поводу Calculation не совсем представляю как это будет. Ты хочешь передавать в TGObject точку, где он столкнулся, а все остальное пусть высчитывает сам? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 5:11 |