Движение круга по периметру экрана - PascalABC.NET

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

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

Нужно сделать так, чтобы круг двигался по периметру всего экрана по часовой стрелке пока не будет нажата ЛКМ.

Решение задачи: «Движение круга по периметру экрана»

textual
Листинг программы
uses graphABC;
const w=400;//размеры окна
      r=20;//радиус круга
      z=1;//задержка
      d=1;//шаг смещения шара
var f:boolean;//переменная для останова программы
procedure MouseDown(x,y,mousebutton: integer);
begin
if mousebutton=1 then f:=false;//если ЛКМ остановка
end;
var x,y:integer;
begin
setwindowsize(w,w);
centerwindow;
f:=true;
onmousedown:=MouseDown;
x:=r;
y:=r;
lockdrawing;
while f do
 begin
  clearwindow;
  setbrushcolor(clRed);
  circle(x,y,10);
  sleep(1);
  if (x<w-r)and(y<=r) then x:=x+1
  else if (y<w-r)and(x>=w-r) then y:=y+1
  else if(x>r)and(y>=w-r) then x:=x-d
  else if (y>r)and(x<=w-r) then y:=y-d;
  redraw;
 end;
end.

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

  1. Объявлены константы: wi — размер окна, r — радиус круга, z — задержка, d — шаг смещения круга.
  2. Объявлена переменная: f — для контроля цикла.
  3. Определён обработчик события мыши: MouseDown — чтобы остановить движение круга.
  4. Инициализированы переменные: x, y — начальные координаты круга.
  5. Задано основное условие для цикла: while f do — пока не нажата ЛКМ.
  6. Очищено окно и установлен цвет кисти.
  7. Нарисован круг на текущих координатах.
  8. Если нажата ЛКМ, то программа останавливается: if mousebutton=1 then f:=false;
  9. Задержка в 1 миллисекунду.
  10. Условие для изменения координат: if (x<w-r)and(y<=r) then x:=x+1
  11. Условие для изменения координат: else if (y<w-r)and(x>=w-r) then y:=y+1
  12. Условие для изменения координат: else if(x>r)and(y>=w-r) then x:=x-d
  13. Условие для изменения координат: else if (y>r)and(x<=w-r) then y:=y-d;
  14. Окно обновляется после изменения координат.
  15. Цикл повторяется.
  16. Код для остановки программы: onmousedown:=MouseDown;
  17. Код для установки размеров окна и его централизации: setwindowsize(w,w); centerwindow;
  18. Инициализация переменной f для контроля цикла: f:=true;
  19. Объявление переменных x и y: var x,y:integer;
  20. Начало выполнения программы: begin

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

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