Графика в 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
- После завершения движения вверх начинается анимация движения круга вправо с увеличением координаты
- Отрисовка круга после анимации:
- Включение рисования на экране
- На экране отрисовывается окно и круг в конечном положении.