Вопрос № 182311: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задача состоит в том чтобы написать программу которая будет изображать движение нескольких ромбов которые при достижение центра другого будут отталкиваться и при достижение ...
Вопрос № 182311:
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задача состоит в том чтобы написать программу которая будет изображать движение нескольких ромбов которые при достижение центра другого будут отталкиваться и при достижение границах тоже должны отталкиваться. Получилось - Написал менюшку, создание ромба, движение и границы ( движение и проверка границы сделаны по таймеру ). Не получилось - не знаю как описать много ромбов и чтобы они от друг друга отталкивались. Друзья накидали
идей пойти через, классы,структуры и массивы. но все равно пока до меня не дошло или доходит но в ходе написание и отладки происходит всякие изъяны. Программу от комментирована для удобного понятия. Не которые функции меню еще не реализованы. Помоги те пожалуйста с 2 вещами, 1 это с идеи и хотябы какой-нибудь кода для реализации сохранения и изменения положение нескольких ромбов.( ромбов может быть много в зависимости от пользователя). 2. Не могли написать к
акая функция отвечает за вывод текста. " Кто написал данную программу - ..." текст для вывода. Прложение. - все файлы http://rfpro.ru/upload/4769 Примечания как бы. 1. Работаю на виндовс 7 ( хп ) 2. использую Borland C++ Builder (6.00) 3. Окно обычное Форма как бы.
Отвечает Киселёва Алёна aka Verena (Профессор) :
Здравствуйте, Алексей Романович! Логично было бы описать ромб в виде класса, в котором будет храниться его цвет, размер, текущие координаты, а методы будут позволять отрисовать его и сдвинуть. Что-то типа такого:
Код:
class
Romb { int x; //координаты, от которых Вы отталкиваетесь при отрисовке int y; TColor col; //цвет ромба TColor fon; //цвет фона public: Romb (int x_, int y_, TColor col_, TColor fon_); void Paint (); //отрисовывает ромб по текущим координатам void Move (); //сдвигает ромб };
В функцию Paint просто поместите отрисовку, типа такого:
if(x==560||x==0) // отталкивания от границ i=i*(-1); if (y==400||y==0) z=z*(-1); x=x+i; y=y+z; Paint(); //заменяем на готовую функ
цию
Плюс надо проверить пересечения с другими ромбами. Не зная о них ничего, проще всего проверить пересечение цветами. Т.е. если ромб попадает в область, где цвет не его и не фона, то место занято. В принципе, достаточно проверить, нет ли пересечений на границах ромба. Нужно сделать цикл, в котором Вы будете назначать новую коодринату и тут же в цикле по точкам будете проверять новые координаты на то, чтобы расположенные по ним границы ромба попадали только в точки цвета фона (Canvas позволяет
взять цвет пикселя по координатам). Если место свободно, координаты оставляете, выходите из цикла и рисуете ромб на новом месте, если нет, меняете координаты и проверяете снова. А хранить ромбы можно действительно в статическом массиве, его размерность будет ограничением для числа создаваемых ромбов. Если не очень понятно, пишите в мини-форум, попробую объяснить, что имелось в виду. Удачи!
----- Эта история - не для истории, понимаешь?
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.