Написать программу, которая рисует восьмиугольник, движущийся по экрану - Turbo Pascal

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

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

Написать программу, которая рисует восьмиугольник, движущийся по экрану

Решение задачи: «Написать программу, которая рисует восьмиугольник, движущийся по экрану»

textual
Листинг программы
  1. uses crt, graph;
  2.  
  3. const
  4.   N     = 8;
  5.   side  = 40;
  6.   dFi   = pi / 180;
  7.   FiLim = 2 * pi / N;
  8.   sideColor = 3;
  9.   pause = 20;
  10.  
  11. type
  12.   top = record
  13.     x, y: integer;
  14.   end;
  15.  
  16. var
  17.   tops: array[1..N] of top;
  18.   FiCur: real;
  19.   i, lineY, lineX: integer;
  20.   graph_device, graph_mode: integer;
  21.  
  22. procedure shift;
  23. var
  24.   bufTop: top;
  25.   i: integer;
  26. begin
  27.   bufTop.x := tops[N].x;
  28.   bufTop.y := tops[N].y;
  29.   for i := 1 to N - 1 do
  30.   begin
  31.     tops[i + 1].x := tops[i].x;
  32.     tops[i + 1].y := tops[i].y;
  33.   end;
  34.   tops[1].x := bufTop.x;
  35.   tops[1].y := bufTop.y;
  36. end;
  37.  
  38. procedure paint(color: word);
  39. var
  40.   i: integer;
  41. begin
  42.   setcolor(color);
  43.   if color = sideColor then line(0, lineY, lineX, lineY);
  44.   for i := 1 to N do
  45.     if i <> N then line(tops[i].x, tops[i].y, tops[i + 1].x, tops[i + 1].y)
  46.               else line(tops[N].x, tops[N].y, tops[1].x,     tops[1].y);
  47. end;
  48.  
  49. procedure recount;
  50. var
  51.   i: integer;
  52. begin
  53.   tops[1].x := round(tops[N].x + side * cos(FiCur));
  54.   tops[1].y := round(tops[N].y - side * sin(FiCur));
  55.   for i := 2 to N - 1 do
  56.   begin
  57.     tops[i].x := round(tops[i - 1].x + side * cos(FiCur + (i - 1) * FiLim));
  58.     tops[i].y := round(tops[i - 1].y - side * sin(FiCur + (i - 1) * FiLim));
  59.   end;
  60. end;
  61.  
  62. procedure rotate;
  63. begin
  64.   delay(pause);
  65.   paint(black);
  66.   FiCur := FiCur - dFi;
  67.   recount;
  68.   paint(sideColor);
  69. end;
  70.  
  71. begin
  72.   FiCur := FiLim;
  73.   graph_device := detect;
  74.   InitGraph(graph_device, graph_mode, '');
  75.   lineX := GetMaxX;
  76.   lineY := GetMaxY * 3 div 4;
  77.   tops[N].x := 150;
  78.   tops[N].y := lineY;
  79.   recount;
  80.   for i := 1 to N do
  81.   begin
  82.     repeat rotate until FiCur <= 0;
  83.     paint(black);
  84.     FiCur := FiLim;
  85.     shift;
  86.   end;
  87.   closegraph;
  88. end.

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

  1. В программе используется библиотека crt и графический модуль graph.
  2. Константа N определяет количество вершин в восьмиугольнике.
  3. Константа side определяет размер стороны восьмиугольника и вычисляется как 40 радиан.
  4. Константа dFi вычисляется как отношение пи к 180 градусам.
  5. Константа FiLim вычисляется как два пи, деленные на N, что позволяет определить максимально возможное изменение угла FiCur без выхода за пределы графического экрана.
  6. Константа sideColor задает цвет стороны восьмиугольника и равен 3.
  7. Константа pause определяет длительность паузы между обновлениями экрана и равна 20.
  8. Тип top представляет вершину восьмиугольника и содержит поля x и y, которые представляют координаты вершины.
  9. Переменная tops представляет массив из N вершин и содержит поля x и y для каждой вершины.
  10. Переменная FiCur содержит текущий угол поворота восьмиугольника.
  11. Переменная i представляет номер текущей вершины восьмиугольника.
  12. Переменная lineY и lineX представляют координаты верхней и нижней сторон восьмиугольника соответственно.
  13. Переменные graph_device и graph_mode представляют устройства и режимы графики соответственно и определяются функцией detect.
  14. Переменная lineX представляет максимальную горизонтальную координату экрана.
  15. Переменная lineY представляет максимальную вертикальную координату экрана, умноженную на 3 и деленную на 4.
  16. Переменная tops[N].x и tops[N].y представляют координаты вершины восьмиугольника, которая находится в правом нижнем углу.
  17. Переменная bufTop представляет буфер для хранения координат предыдущей вершины.
  18. Переменная FiCur изменяется от 0 до 2*pi, что позволяет описать полный оборот восьмиугольника.
  19. Переменная recount пересчитывает координаты всех вершин восьмиугольника.
  20. Переменная shift перемещает все вершины восьмиугольника на одну позицию вправо.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы