Движение шарика - 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.
Объяснение кода листинга программы
- uses graph,wincrt; — подключаем необходимые библиотеки для работы с графикой
- var x0,x,y,r:integer; — объявляем целочисленные переменные для хранения координат и радиуса шарика
- u:real; — объявляем переменную с плавающей точкой для хранения угла
- begin — начало выполнения программы
- initgraph(x,y,''); — инициализируем графический модуль, передавая в функцию начальные координаты шарика и его радиус
- r:=10; — присваиваем радиус шарика значение 10
- x0:=getmaxX div 2; — присваиваем координату X центра шарика значение половины максимальной X координаты
- y:=r; — присваиваем координату Y центра шарика значение радиуса шарика
- randomize; — инициализируем генератор случайных чисел
- *u:=arctan((-x0+random(2x0+1))/(getmaxY-y));** — вычисляем начальный угол для движения шарика
- setcolor(12); — устанавливаем цвет заливки и контура шарика на 12 (синий)
- setfillstyle(1,12); — устанавливаем стиль заливки и контура шарика на сплошной и синий
- fillellipse(x0,y,r,r); — рисуем шарик с заданными координатами и радиусом
- randomize; — инициализируем генератор случайных чисел
- repeat — начинаем цикл, который будет выполняться до тех пор, пока шарик не достигнет нижней границы экрана
- delay(50); — задержка в 50 миллисекунд для плавного движения шарика
- cleardevice; — очищаем экран
- y:=y+5; — увеличиваем координату Y на 5
- *x:=x0+round(ysin(u)/cos(u));** — вычисляем новую координату X шарика с учетом угла и синусоиды
- setcolor(12); — устанавливаем цвет заливки и контура шарика на 12 (синий)
- setfillstyle(1,12); — устанавливаем стиль заливки и контура шарика на сплошной и синий
- fillellipse(x,y,r,r); — рисуем шарик с новыми координатами и радиусом
- until y>=getmaxY-r; — условие цикла, которое проверяется перед каждой итерацией
- readkey — ожидаем нажатия клавиши для завершения программы
- end. — конец программы