Графика. Анимация песочных часов (песочные часы) - Pascal ABC

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

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

Помогите сделать анимацию песчаных часов, при чем чтобы ничего не противоречило законам физики. Нужно чтобы несколько линий в верхней части часов исчезали и появлялись внизу, т.е. закрашивались (ну или же как-то по другому сделать падание песчинок)

Решение задачи: «Графика. Анимация песочных часов (песочные часы)»

textual
Листинг программы
uses
  Graphabc;
 
var
  i, j, k: integer;
 
begin
  setwindowsize(800, 600);
  k := 0;
  lockDrawing;
  for j := 0 to 74 do
  begin
    clearWindow;
    setBrushColor(clGray);
    setPenColor(clLtGray);
    FillRect(50, 80, 161, 100);
    FillRect(50, 350, 161, 370);
    for i := 0 to 1 do
    begin
      moveTo(75 + i * 3, 100);
      lineTo(75 + i * 3, 200);
      lineTo(100 + i * 3, 225);
      lineTo(75 + i * 3, 250);
      lineTo(75 + i * 3, 350);
    end;
    for i := 0 to 1 do
    begin
      moveTo(135 - i * 3, 100);
      lineTo(135 - i * 3, 200);
      lineTo(110 - i * 3, 225);
      lineTo(135 - i * 3, 250);
      lineTo(135 - i * 3, 350);
    end;
    setPenColor(clBrown);
    if j < 50 then
    begin
      moveTo(79, 150 + j);
      lineTo(131, 150 + j);
      lineTo(131, 200);
      lineTo(105, 226);
      lineTo(79, 200);
      lineTo(79, 150 + j);
      FloodFill(105, 225, clBrown);
      line(105, 226, 105, 340);
    end else if j in [50..73] then
    begin
      moveTo(105, 226);
      lineTo(79 + k, 200 + k);
      lineTo(131 - k, 200 + k);
      lineTo(105, 226);
      FloodFill(105, 225, clBrown);
      line(105, 226, 105, 340);
      inc(k);
    end;
 
    moveTo(79, 349);
    lineTo(131, 349);
    lineTo(131, 348 - j);
    lineTo(105, 322 - j);
    lineTo(79, 348 - j);
    lineTo(79, 349 - j);
    FloodFill(105, 348, clBrown);
    sleep(100);
    redraw;
  end;
end.

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

  1. В начале кода подключается библиотека GraphABC.
  2. Затем объявляются переменные i, j, k типа integer, а также переменная k, которая инициализируется значением 0.
  3. Функцией setwindowsize задается размер окна приложения.
  4. Затем с помощью оператора lockDrawing блокируется возможность рисования на экране до тех пор, пока это не будет необходимо.
  5. Далее идет цикл for, который выполняется 74 раза.
  6. Внутри цикла на экран рисуются песочные часы.
  7. Для этого сначала с помощью функции clearWindow очищается текущее окно.
  8. Затем с помощью функций setBrushColor и setPenColor устанавливаются цвета кисти и пера соответственно.
  9. После этого с помощью функции FillRect рисуется основа песочных часов.
  10. Далее внутри цикла for, который повторяется 8 раз, с помощью функций moveTo и lineTo рисуются стрелки песочных часов.
  11. После этого с помощью функции setPenColor устанавливается новый цвет пера.
  12. Затем с помощью условного оператора if определяется, какая часть песочных часов должна быть закрашена.
  13. После этого с помощью функций moveTo, lineTo, FloodFill и line рисуется закрашенная область.
  14. После завершения цикла for с помощью функции redraw восстанавливается исходное состояние окна.
  15. В конце кода с помощью функции sleep(100) задерживается выполнение программы на 100 миллисекунд, а затем вызывается функция redraw.
  16. Конец программы.

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

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