Вопрос № 167061: Уважаемые Эксперты! Исправьте пожалуйста задачу, очень прошу <img src="http://rusfaq.ru/images/Forum/10.gif" border="0"> нужно чтобы границы были четкими, т.е. шарик не заходил на границу(слева так и есть а вот справа чуть чуть заходит), и нужно ...
Вопрос № 167.061
Уважаемые Эксперты! Исправьте пожалуйста задачу, очень прошу нужно чтобы границы были четкими, т.е. шарик не заходил на границу(слева так и есть а вот справа чуть чуть заходит), и нужно исключить, чтобы шарик не двигался перпендикулярно линиям фигуры, т.е. только по диагонали, заранее премного благодарен!!!(код в приложении)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, S K A L T !
1) Вы считываете изображение шарика с помощью: Getimage(i,j,i+6,j+6,p^);, обратите внимание на шестерки, это есть высота и ширина изображения, которую Вы не учитываете при проверке столкновения со стенкой в строках:
Код:
{ по оси X } if (j<y5)
and (i+dx>x2) or (j>y5) and (i+dx>x5) or (i+dx<x) then dx:=-dx; { по оси Y } if (i<x5) and (j+dy>y1) or (i>x5) and (j+dy>y5) or (j+dy<y) then dy:=-dy;
при проверке нижнего-правого предела границ. Я эти строки переписал так:
Код:
{ по оси X } if (j<y5) and (i+dx>x2-k) or (j>y5) and (i+dx>x5-k) or (i+dx<x) then dx:=-dx; { по оси Y } if (i<x5) and (j+dy>y1-k) or (i>x5) and (j+dy>y5-k) or (j+dy<y) then dy:=-dy;
где k- константа равная шесть. 2) В строках генерации начального смещения :
Код:
repeat dx:=random(3)-1; {-1 .. 1} dy:=random(3)-1; {-1 .. 1} until (dx<>0) and (dy<>0);
замените логическую операцию на AND, после этого у Вас останутся только диагональные направления и соответственно уже строкибудут лишние:
Код:
if dy=0 then dy:=random(3)-1; if dx=0 then dx:=random(3)-1;
Окончательный вариант в приложении.
Удачи Вам!
Приложение:
Ответ отправил: Зенченко Константин Николаевич (статус: Профессор) Украина, Киев ---- Ответ отправлен: 12.05.2009, 20:47
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 249048 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.