Движение шарика - Free Pascal

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

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

создайте программу, где шарик падает сверху вниз в произвольном направлении

Решение задачи: «Движение шарика»

textual
Листинг программы
uses graph,wincrt;
var x0,x,y,r:integer;
    u:real;
begin
initgraph(x,y,'');
r:=10;
x0:=getmaxX div 2;
y:=r;
randomize;
u:=arctan((-x0+random(2*x0+1))/(getmaxY-y));
setcolor(12);
setfillstyle(1,12);
fillellipse(x0,y,r,r);
randomize;
repeat
delay(50);
cleardevice;
y:=y+5;
x:=x0+round(y*sin(u)/cos(u));
setcolor(12);
setfillstyle(1,12);
fillellipse(x,y,r,r);
until y>=getmaxY-r;
readkey
end.

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

  1. uses graph,wincrt; — подключаем необходимые библиотеки для работы с графикой
  2. var x0,x,y,r:integer; — объявляем целочисленные переменные для хранения координат и радиуса шарика
  3. u:real; — объявляем переменную с плавающей точкой для хранения угла
  4. begin — начало выполнения программы
  5. initgraph(x,y,''); — инициализируем графический модуль, передавая в функцию начальные координаты шарика и его радиус
  6. r:=10; — присваиваем радиус шарика значение 10
  7. x0:=getmaxX div 2; — присваиваем координату X центра шарика значение половины максимальной X координаты
  8. y:=r; — присваиваем координату Y центра шарика значение радиуса шарика
  9. randomize; — инициализируем генератор случайных чисел
  10. *u:=arctan((-x0+random(2x0+1))/(getmaxY-y));** — вычисляем начальный угол для движения шарика
  11. setcolor(12); — устанавливаем цвет заливки и контура шарика на 12 (синий)
  12. setfillstyle(1,12); — устанавливаем стиль заливки и контура шарика на сплошной и синий
  13. fillellipse(x0,y,r,r); — рисуем шарик с заданными координатами и радиусом
  14. randomize; — инициализируем генератор случайных чисел
  15. repeat — начинаем цикл, который будет выполняться до тех пор, пока шарик не достигнет нижней границы экрана
  16. delay(50); — задержка в 50 миллисекунд для плавного движения шарика
  17. cleardevice; — очищаем экран
  18. y:=y+5; — увеличиваем координату Y на 5
  19. *x:=x0+round(ysin(u)/cos(u));** — вычисляем новую координату X шарика с учетом угла и синусоиды
  20. setcolor(12); — устанавливаем цвет заливки и контура шарика на 12 (синий)
  21. setfillstyle(1,12); — устанавливаем стиль заливки и контура шарика на сплошной и синий
  22. fillellipse(x,y,r,r); — рисуем шарик с новыми координатами и радиусом
  23. until y>=getmaxY-r; — условие цикла, которое проверяется перед каждой итерацией
  24. readkey — ожидаем нажатия клавиши для завершения программы
  25. end. — конец программы

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

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