Реализовать движение футбольного мяча после удара - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Написать программу, реализующую движение футбольного мяча после удара(задается начальное положение мяча и вектор скорости) в процессе полета мяч ударяется об пол, потолок и стены теряя при каждом ударе часть энергии

Решение задачи: «Реализовать движение футбольного мяча после удара»

textual
Листинг программы
uses crt,graphABC;
const r=20;
var x,y,d,dx,dy,v,z:integer;
    u:real;
begin
repeat
write('Введите координату х от ',2*r,' до ',windowwidth -r,' x=');
readln(x);
until (x>=2*r)and(x<=windowwidth-r);
repeat
write('Введите координату y от ',windowheight-5*r,' до ',windowheight-r,' y=');
readln(y);//ближе к полу
until (y>=windowheight-5*r)and(y<=windowheight-r);
writeln('Вектор скорости:');
repeat
write('Введите направление, угол от 0 до 360 градусов u=');
readln(u);
until(u>=0)and(u<=360);
repeat
write('Введите начальную скорость в пикселях/секунду от 500 до 1000 v=');
readln(v);
until (v>=500)and(v<=1000);
clrscr;
hidecursor;
u:=u*pi/180; //угол в радианах
d:=5;//шаг
z:=round(1000/v*d) ;//задержка перерисовки
dx:=round(d*cos(u)); //шаг по Х
dy:=-round(d*sin(u)); //шаг по Y
circle(x,y,r);
lockdrawing;
repeat
clearwindow;
circle(x,y,r);
delay(z);
x:=x+dx; //перемещаем
y:=y+dy;
if (x-r<=0)or(x+r>=windowwidth) then //левая или правая стенки
 begin
  dx:=-dx; //смена направления по Х
  z:=z+10; //увеличение задержки
 end;
if (y-r<=0)or(y+r>=windowheight)then//потолок и пол
 begin
  dy:=-dy;//смена направления по Y
  z:=z+10;//увеличение задержки
 end;
redraw;
if z>100 then
 begin
  dx:=0;
  dy:=5;
 end;
until (z>50)and(y>=windowheight-r);
end.

Объяснение кода листинга программы

  1. Создается переменная r со значением 20.
  2. Создаются переменные x, y, d, dx, dy, v, z со значениями типа integer.
  3. Создается переменная u со значением типа real.
  4. Используется функция readln() для чтения координат x и y с консоли.
  5. Используется функция clrscr() и hidecursor() для очистки экрана и скрытия курсора.
  6. Вычисляется угол u в радианах.
  7. Задается значение d равное 5.
  8. Задается значение z равное округленному значению (1000/v)*d. Это будет задержка перерисовки.
  9. Вычисляются значения dx и dy по формуле dx=round(d*cos(u)) и dy=round(d*sin(u)) соответственно. Это шаги по осям X и Y.
  10. Вычисляется значение r округляется до ближайшего целого числа.
  11. Используется функция circle(x,y,r) для рисования окружности с центром в точке (x,y) и радиусом r.
  12. Используется функция clearwindow() для очистки окна.
  13. Используется функция delay(z) для задержки перерисовки.
  14. Вычисляется новое значение x как x+dx.
  15. Вычисляется новое значение y как y+dy.
  16. Проверяется условие if (x-r<=0)or(x+r>=windowwidth) для проверки границ по оси X. Если условие истинно, то меняется направление по оси X с помощью dx=-dx. Также увеличивается задержка перерисовки z.
  17. Проверяется условие if (y-r<=0)or(y+r>=windowheight) для проверки границ по оси Y. Если условие истинно, то меняется направление по оси Y с помощью dy=-dy. Также увеличивается задержка перерисовки z.
  18. Вызывается функция redraw() для перерисовки окна.
  19. Проверяется условие if z>100 для проверки, если задержка перерисовки превысила 100 миллисекунд. Если условие истинно, то устанавливаются значения dx и dy равными нулю и y равным 5. Это будет означать выход из цикла.
  20. Останавливается выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы