Помощь - Поиск - Пользователи - Календарь
Полная версия: объектно-ориентированное программирование, графика.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
gach
Создать библиотеку объектных типов, которая должна содержать, как минимум, описания одного родительского типа и двух дочерних. Прообразом создаваемых объектов должен послужить движущийся графический объект. Объекты должны отличаться методами движения: один должен уметь двигаться по экрану случайным образом, другой – под управлением соответствующих клавиш в восьми возможных направлениях (вертикальных, горизонтальных, диагональных). Разработать программу – объектно-ориентированное приложение, в котором должно быть организовано движение по экрану, как минимум, двух экземпляров динамических объектов:
Первого – случайным образом, второго – под управлением соответствующих клавиш.


Может у кого есть такой пример или подобный? Очень надо. Помогите плиз!!!
volvo
Вот тебе набросок... Управление (по диагонали доделаешь сам, по аналогии) - с цифровой клавиатуры в режиме NumLock, клавиши 2, 4, 6, 8...

Красный объект - управляемый, белые - случайно перемещающиеся. Пока программа рассчитана на любое количество случайных объектов, и один управляемый. gach, вопрос на засыпку: почему, и можно ли этого избежать?

excl.gif
"Ну-с... Пора внести разнообразие в отдых..." (С) Особенности национальной рыбалки.

Первый, кто предложит работающее решение (естественно, в стиле ООП), при котором будет возможно в приведеную мной программу добавить больше одного управляемого объекта, получает +1 в рейтинг... smile.gif
gach
Цитата(volvo @ 9.05.2006 19:28)
Вот тебе набросок...


Окей. Сейчас посмотрим.
gach
Оооо. ТО что надо!!!! Спасибо огромное! Теперь буду разбираться!!!! вот это спец!!!! Мой глубокий поклон!!!
gach
Вот вопросик возник.
procedure TObj.recalc;
begin
Inc(X, DX); Inc(Y, DY);
end;

Что эта процедура делает? Что такое Inc(X, DX); Inc(Y, DY);?

И еще вопрос.
procedure TObj.show(is_active: boolean);
const R = 5;
begin
if is_active then setcolor(get_color)
else setcolor(TObj.get_color);

circle(X, Y, R);
end;

Что такое is_active и почему оно boolean?

И еще вопрос.
constructor TRandomObj.Init;
begin
Inherited Init;
Tick := 0;
end;


Что такое Tick? почему он нулю равен??
volvo
Значит, так... Первый вопрос:
насчет "что делает" - это попытайся разобраться сам. Что такое
Inc(X, DX); Inc(Y, DY);
- это то же самое, что
X := X + DX; Y := Y + DY;


Второе. Посмотри на вызов процедуры Show, и тебе все станет понятно. Show(False) скрывает объект, Show(True) показывает его... Почему Boolean? А мне не нужно больше 2-х состояний, объект может быть только видим/невидим... Третьего не дано. А у какого еще встроенного типа есть только 2 состояния?

Третье. Constructor тебе ничего не говорит? Зачем вообще конструкторы используются, в курсе?
Насчет "что такое Tick" - а ты найди место, где с этой переменной что-то делается, и посмотри ЧТО именно, тогда все поймешь...
gach
Значит я правильно понял что процедура procedure TObj.recalc изменяет начальные координаты? ТО есть отвечает за движение? Или я что-то напутал?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.