Вот такое задание: Даны два шарика диаметром М. Промоделировать движение шариков по всей плоскости экрана. Шарики могут двигаться по прямым линиям. Изменение угла движения после столкновения с границей экрана или друг с другом может быть случайной величиной. Шарик не может вылететь за пределы квадрата. Пользователь может варьировать скорости движения шариков с помощью стрелок управления курсором.
Хотелось бы разобраться в коде программы... ( дело в том, что код не мой) Объясните пожалуйста назначение каждой из процедур в тексте приведённой ниже программы!
{проверка на столкновение} function balls_hit (const r1,r2 : integer; x1,y1,x2,y2 : integer) : boolean; var dist : real; t1, t2, t3, t4, t5: real; begin t1 := abs(x2-x1); t2 := sqr(t1); t3 := abs(y2-y1); t4 := sqr(t3); t5 := t2 + t4; dist := sqrt(t5);
balls_hit := (dist < (r1 + r2)); end;
{если шары стлкнулись - изменяем скорость и угол } procedure balls_hit_2; begin if balls_hit(r1,r2,x1,y1,x2,y2) then after_hit (speed1, speed2, x1, y1,x2, y2,angle1,angle2); end;
Причин несколько. 1. ты снова забываешь сменить углы.. 2. одна переменная у тебя называется spee1 (должно быть, видимо, speed1) 3. Ты пересчитываешь параметры, но обратно из процедуры они у тебя не передаются. Чтоб передавались, используй декларацию var.
Можно один вопрос? Зачем ты искусственно увеличиваешь код программы? Тебе кажется, так проще? или так от вас требуют препы? Например, функция balls_hit моогла бы выглядеть много короче..
function balls_hit (r1,r2,x1,y1,x2,y2 : integer) : boolean; begin balls_hit := Sqrt(Sqr(x2-x1)+Sqr(y2-y1)) < r1+r2 end;
Разве так не проще? Все сразу видно..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой