Графика в Pascal: сохранение траектории при изменении размера экрана
Формулировка задачи:
Сохранение траектории при изменении размер экрана
Листинг программы
- uses graphabc;
- ****************************
- while y>r+10 do
- beginvar x,y:integer;
- const a1=10;b1=10;a2=610;b2=310;r=20;
- begin
- x:=a2-r-2; y:=b2-r-2;
- //**********************************************
- while (y>(b2+b1)/2) and (x>(a2+a1)/2) do
- begin
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- circle (x,y,r);
- floodfill(x,y,clred);
- sleep(60);
- y:=y-6;
- x:=x-13;
- end;
- //********************
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- circle(x,y,r);
- floodfill(x,y,clred);
- sleep(60);
- y:=y-3;
- end;
- //**********************************************
- while x>r+12 do
- begin
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- circle (x,y,r);
- floodfill(x,y,clred);
- sleep(60);
- x:=x-10;
- end;
- //************************************************
- while y<(b2-r)-5 do
- begin
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- circle (x,y,r);
- floodfill(x,y,clred);
- sleep(60);
- y:=y+5;
- end;
- //************************************************
- while x<(a1+a2)/2 do
- begin
- setbrushcolor(clolive);
- rectangle(a1,b1,a2,b2);
- circle(x,y,r);
- floodfill(x,y,clred);
- sleep(60);
- x:=x+3;
- end;
- //***********************************************
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- circle(x,y,r);
- floodfill(x,y,clBlack);
- end.
как сделать, чтобы сохранялась траектория при изменении a1,a2,b1,b2?
Решение задачи: «Графика в Pascal: сохранение траектории при изменении размера экрана»
textual
Листинг программы
- uses graphabc;
- var a1,a2,b1,b2,x,y:integer;
- const r=20;
- begin
- setwindowsize(800,500);
- centerwindow;
- a1:=10;b1:=10;
- a2:=windowwidth-10; b2:=windowheight-10;
- x:=a2-r-2; y:=b2-r-2;
- //**********************************************
- lockdrawing;
- while (y>(b2+b1)/2) and (x>(a2+a1)/2) do
- begin
- clearwindow;
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- sleep(60);
- y:=y-6;
- x:=x-13;
- redraw
- end;
- //************************************************
- while y>r+10 do
- begin
- clearwindow;
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- sleep(60);
- y:=y-3;
- redraw;
- end;
- //**********************************************
- while x>a1+r+5 do
- begin
- clearwindow;
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- sleep(60);
- x:=x-10;
- redraw
- end;
- //************************************************
- while y<b2-r-5 do
- begin
- clearwindow;
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- sleep(60);
- y:=y+5;
- redraw;
- end;
- //************************************************
- while x<(a1+a2)div 2 do
- begin
- clearwindow;
- setbrushcolor(clolive);
- rectangle(a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- sleep(60);
- x:=x+3;
- redraw;
- end;
- //***********************************************
- unlockdrawing;
- setbrushcolor(clolive);
- rectangle (a1,b1,a2,b2);
- setpencolor(clRed);
- setbrushcolor(clRed);
- circle (x,y,r);
- end.
Объяснение кода листинга программы
- Объявление переменных:
a1
- целое число, значение равно 10a2
- целое число, значение равно (ширина окна - 10)b1
- целое число, значение равно 10b2
- целое число, значение равно (высота окна - 10)x
- целое число, значение зависит от ширины окнаy
- целое число, значение зависит от высоты окна
- Установление размера окна:
- Устанавливается размер окна 800х500
- Окно центрируется на экране
- Анимация движения круга:
- Отключение рисования на экране
- Анимация движения круга по траектории с уменьшением координат
x
иy
- После каждого изменения координат происходит очистка экрана, рисование круга и пауза в 60 миллисекунд
- Анимация заканчивается при достижении кругом половины высоты и половины ширины окна
- Падение круга:
- После окончания первой анимации начинается анимация падения круга с постепенным уменьшением координаты
y
- Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
- Анимация заканчивается, когда круг достигает определенной высоты
- После окончания первой анимации начинается анимация падения круга с постепенным уменьшением координаты
- Движение круга влево:
- После завершения падения круга начинается его движение влево с уменьшением координаты
x
- Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
- Анимация заканчивается при достижении кругом определенной координаты
x
- После завершения падения круга начинается его движение влево с уменьшением координаты
- Движение круга вверх:
- После завершения движения влево начинается анимация движения круга вверх с увеличением координаты
y
- Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
- Анимация заканчивается при достижении кругом определенной координаты
y
- После завершения движения влево начинается анимация движения круга вверх с увеличением координаты
- Движение круга вправо:
- После завершения движения вверх начинается анимация движения круга вправо с увеличением координаты
x
- Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
- Анимация заканчивается при достижении кругом определенной координаты
x
- После завершения движения вверх начинается анимация движения круга вправо с увеличением координаты
- Отрисовка круга после анимации:
- Включение рисования на экране
- На экране отрисовывается окно и круг в конечном положении.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д