Графика в 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.

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

  1. Объявление переменных:
    • a1 - целое число, значение равно 10
    • a2 - целое число, значение равно (ширина окна - 10)
    • b1 - целое число, значение равно 10
    • b2 - целое число, значение равно (высота окна - 10)
    • x - целое число, значение зависит от ширины окна
    • y - целое число, значение зависит от высоты окна
  2. Установление размера окна:
    • Устанавливается размер окна 800х500
    • Окно центрируется на экране
  3. Анимация движения круга:
    • Отключение рисования на экране
    • Анимация движения круга по траектории с уменьшением координат x и y
    • После каждого изменения координат происходит очистка экрана, рисование круга и пауза в 60 миллисекунд
    • Анимация заканчивается при достижении кругом половины высоты и половины ширины окна
  4. Падение круга:
    • После окончания первой анимации начинается анимация падения круга с постепенным уменьшением координаты y
    • Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
    • Анимация заканчивается, когда круг достигает определенной высоты
  5. Движение круга влево:
    • После завершения падения круга начинается его движение влево с уменьшением координаты x
    • Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
    • Анимация заканчивается при достижении кругом определенной координаты x
  6. Движение круга вверх:
    • После завершения движения влево начинается анимация движения круга вверх с увеличением координаты y
    • Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
    • Анимация заканчивается при достижении кругом определенной координаты y
  7. Движение круга вправо:
    • После завершения движения вверх начинается анимация движения круга вправо с увеличением координаты x
    • Экран очищается, рисуется круг и происходит пауза в 60 миллисекунд
    • Анимация заканчивается при достижении кругом определенной координаты x
  8. Отрисовка круга после анимации:
    • Включение рисования на экране
    • На экране отрисовывается окно и круг в конечном положении.

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

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