Анимация ( плоский рисунок с движением) - QBasic
Формулировка задачи:
Уважаемые! завтра екзамен, помогите с программами анимации, пожалуйста!
1. часы (стрелки должны идти)
2. краник с капающими каплями воды
3. шарик, что падает на стол а потом скачивается с него
4. стакан с пупырышками что поднимаются и исчезают (как в шампанском)
цвет обьектов значения не имеет
спасибо.
Решение задачи: «Анимация ( плоский рисунок с движением)»
textual
Листинг программы
- SCREEN 12
- CONST Pi = 3.14159265358#
- x0 = 320: y0 = 240: r = 220: rs = 200: rm = 180: rh = 175: DIM c$(12)
- DATA XII,I,II,III,IV,V,VI,VII,VIII,IX,X,XI
- FOR i = 1 TO 12: READ c$(i): NEXT
- CIRCLE (x0, y0), r, 4
- FOR s = 0 TO 59
- ax = CINT(x0 - r * COS((Pi / 180) * (6 * s + 90)))
- ay = CINT(y0 - r * SIN((Pi / 180) * (6 * s + 90)))
- ax1 = CINT(x0 - (r - 15) * COS((Pi / 180) * (6 * s + 90)))
- ay1 = CINT(y0 - (r - 15) * SIN((Pi / 180) * (6 * s + 90)))
- ax2 = CINT(x0 - (r - 5) * COS((Pi / 180) * (6 * s + 90)))
- ay2 = CINT(y0 - (r - 5) * SIN((Pi / 180) * (6 * s + 90)))
- IF s MOD 5 = 0 THEN
- LINE (ax, ay)-(ax1, ay1), 5
- LOCATE ay1 / 16, ax1 / 8: PRINT c$((s / 5) + 1)
- ELSE
- LINE (ax, ay)-(ax2, ay2), 5
- END IF
- NEXT
- WHILE INKEY$ = ""
- a$ = TIME$
- h = VAL(MID$(a$, 1, 2))
- m = VAL(MID$(a$, 4, 2))
- s1 = s: s = VAL(MID$(a$, 7, 2))
- IF s1 <> s THEN
- LINE (x0, y0)-(xs, ys), 0
- LINE (x0, y0)-(xm, ym), 0
- LINE (x0, y0)-(xh, yh), 0
- xs = CINT(x0 - rs * COS((Pi / 180) * (6 * s + 90)))
- ys = CINT(y0 - rs * SIN((Pi / 180) * (6 * s + 90)))
- LINE (x0, y0)-(xs, ys), 4
- xm = CINT(x0 - rm * COS((Pi / 180) * (90 + 6 * m)))
- ym = CINT(y0 - rm * SIN((Pi / 180) * (90 + 6 * m)))
- LINE (x0, y0)-(xm, ym), 15
- xh = CINT(x0 - rh * COS((Pi / 180) * (90 + 6 * ((h MOD 12) * 5 + m \ 12))))
- yh = CINT(y0 - rh * SIN((Pi / 180) * (90 + 6 * ((h MOD 12) * 5 + m \ 12))))
- LINE (x0, y0)-(xh, yh), 1
- END IF
- WEND
Объяснение кода листинга программы
- Начало работы программы
- Определение константы Pi и начальных значений переменных x0, y0, r, rs, rm, rh, c$(12) и DATA XII,I,II,III,IV,V,VI,VII,VIII,IX,X,XI
- Цикл FOR для чтения данных из файла c$(i) и построения круга с центром в (x0, y0) и радиусом r
- Цикл FOR для анимации, который выполняется 60 раз (для одного полного оборота)
- Вычисление координат точек ax, ay, ax1, ay1, ax2, ay2 для текущего угла в диапазоне от 0 до 360 градусов
- Проверка условия s MOD 5 = 0, которое выполняется при каждом пятом шаге (т.е. при 0, 5, 10, 15, ..., 60)
- Если условие выполняется, то строятся линии между точками ax, ay и ax1, ay1, а также выводится значение переменной c$((s / 5) + 1)
- Если условие не выполняется, то строятся линии между точками ax, ay и ax2, ay2
- Цикл WHILE INKEY$ = `` для обработки нажатий клавиш и обновления значений переменных s, rs, rm, rh при каждом нажатии клавиши
- Вычисление текущего времени и разделение его на часы, минуты и секунды для обновления значений переменных h, m, s1, s
- Если s1 не равно s, то это означает, что время изменилось, и требуется обновить значения переменных xs, ys, xm, ym, xh, yh
- Обновление значений переменных xs, ys, xm, ym, xh, yh на основе новых значений h, m, s
- Построение линий между точками (x0, y0) и (xs, ys), (x0, y0) и (xm, ym), (x0, y0) и (xh, yh) с помощью функции LINE
- Вывод значения переменной a$ (текущего времени) в момент нажатия клавиши
- Завершение цикла WHILE и возврат в начало программы
- Конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д