Анимация ( плоский рисунок с движением) - 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 и возврат в начало программы
- Конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д