Графика. Анимация песочных часов (песочные часы) - 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.
Объяснение кода листинга программы
- В начале кода подключается библиотека GraphABC.
- Затем объявляются переменные i, j, k типа integer, а также переменная k, которая инициализируется значением 0.
- Функцией setwindowsize задается размер окна приложения.
- Затем с помощью оператора lockDrawing блокируется возможность рисования на экране до тех пор, пока это не будет необходимо.
- Далее идет цикл for, который выполняется 74 раза.
- Внутри цикла на экран рисуются песочные часы.
- Для этого сначала с помощью функции clearWindow очищается текущее окно.
- Затем с помощью функций setBrushColor и setPenColor устанавливаются цвета кисти и пера соответственно.
- После этого с помощью функции FillRect рисуется основа песочных часов.
- Далее внутри цикла for, который повторяется 8 раз, с помощью функций moveTo и lineTo рисуются стрелки песочных часов.
- После этого с помощью функции setPenColor устанавливается новый цвет пера.
- Затем с помощью условного оператора if определяется, какая часть песочных часов должна быть закрашена.
- После этого с помощью функций moveTo, lineTo, FloodFill и line рисуется закрашенная область.
- После завершения цикла for с помощью функции redraw восстанавливается исходное состояние окна.
- В конце кода с помощью функции sleep(100) задерживается выполнение программы на 100 миллисекунд, а затем вызывается функция redraw.
- Конец программы.