Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Асмик Александровна
Статус: Академик
Рейтинг: 7391
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2647
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2312
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1639
Дата выхода:03.03.2011, 14:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:317 / 185
Вопросов / ответов:1 / 1

Вопрос № 182311: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Задача состоит в том чтобы написать программу которая будет изображать движение нескольких ромбов которые при достижение центра другого будут отталкиваться и при достижение ...



Вопрос № 182311:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Задача состоит в том чтобы написать программу которая будет изображать движение нескольких ромбов которые при достижение центра другого будут отталкиваться и при достижение границах тоже должны отталкиваться.
Получилось - Написал менюшку, создание ромба, движение и границы ( движение и проверка границы сделаны по таймеру ).
Не получилось - не знаю как описать много ромбов и чтобы они от друг друга отталкивались. Друзья накидали идей пойти через, классы,структуры и массивы. но все равно пока до меня не дошло или доходит но в ходе написание и отладки происходит всякие изъяны. Программу от комментирована для удобного понятия. Не которые функции меню еще не реализованы.
Помоги те пожалуйста с 2 вещами, 1 это с идеи и хотябы какой-нибудь кода для реализации сохранения и изменения положение нескольких ромбов.( ромбов может быть много в зависимости от пользователя).
2. Не могли написать к акая функция отвечает за вывод текста. " Кто написал данную программу - ..." текст для вывода.
Прложение. - все файлы http://rfpro.ru/upload/4769
Примечания как бы.
1. Работаю на виндовс 7 ( хп )
2. использую Borland C++ Builder (6.00)
3. Окно обычное Форма как бы.

Отправлен: 26.02.2011, 01:46
Вопрос задал: Алексей Романович (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Киселёва Алёна 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 просто поместите отрисовку, типа такого:
Код:
Canvas->Brush->Color=col;
TPoint lozenge[4];
lozenge[0]=TPoint(x+20,y+10);
lozenge[1]=TPoint(x+10,y+30);
lozenge[2]=TPoint(x+20,y+50);
lozenge[3]=TPoint(x+30,y+30);
Canvas->Polygon(lozenge,4);

А в функции Move этот Ваш код:
Код:
if(x==560||x==0)                    // отталкивания от границ
i=i*(-1);
if (y==400||y==0)
z=z*(-1);
x=x+i;
y=y+z;
Paint(); //заменяем на готовую функ цию

Плюс надо проверить пересечения с другими ромбами. Не зная о них ничего, проще всего проверить пересечение цветами. Т.е. если ромб попадает в область, где цвет не его и не фона, то место занято. В принципе, достаточно проверить, нет ли пересечений на границах ромба. Нужно сделать цикл, в котором Вы будете назначать новую коодринату и тут же в цикле по точкам будете проверять новые координаты на то, чтобы расположенные по ним границы ромба попадали только в точки цвета фона (Canvas позволяет взять цвет пикселя по координатам). Если место свободно, координаты оставляете, выходите из цикла и рисуете ромб на новом месте, если нет, меняете координаты и проверяете снова.
А хранить ромбы можно действительно в статическом массиве, его размерность будет ограничением для числа создаваемых ромбов.
Если не очень понятно, пишите в мини-форум, попробую объяснить, что имелось в виду.
Удачи!
-----
Эта история - не для истории, понимаешь?

Ответ отправил: Киселёва Алёна aka Verena (Профессор)
Ответ отправлен: 02.03.2011, 12:56
Номер ответа: 266063
Россия, Москва
Адрес: Москва, Солнцево
Адрес сайта: Творчество, цитаты, события.
ICQ # 230360822

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266063 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное