Опубликовано: 2020-06-30 08:00:00
Анимация фейерверка
В этой статье представлена неплохая реализации отрисовки анимации фейерверка.
Рассмотрим исходный текст программы:
- DECLARE SUB FLIP ()
- CONST PMAX = 250
- CONST POINTSRAZLET = 25
- CONST RAZLETLIFE = 40
- CONST SNARYADLIFE = 100
- DIM PX(PMAX), PY(PMAX), CV%(PMAX)
- DIM SX(PMAX), SY(PMAX), LIFE%(PMAX)
- DIM STAT%(PMAX)
- DIM SCHET%
- ' EKRAN
- DIM SHARED ACT%, VIZ%
- ACT% = 1: VIZ% = 0
- SCREEN 9, , VIZ%, ACT%
- WHILE INKEY$ = ""
- SCHET% = (SCHET% + 1) AND 3
- IF SCHET% = 0 THEN
- FOR I = 1 TO PMAX
- IF STAT%(I) = 0 THEN
- STAT%(I) = 1
- PX(I) = 320 'RND * 320 + 160
- PY(I) = 349
- CV%(I) = RND * 15
- SX(I) = (RND * 5) - 2.5
- SY(I) = -(RND * 1 + 2)
- LIFE%(I) = SNARYADLIFE * ((RND + 1) / 2)
- EXIT FOR
- END IF
- NEXT
- END IF
- CLS 2
- LINE (0, 336)-(639, 349), 0, BF
- FOR I = 1 TO PMAX
- IF STAT%(I) = 1 THEN
- PX(I) = PX(I) + SX(I)
- PY(I) = PY(I) + SY(I)
- CIRCLE (PX(I), PY(I)), 1, CV%(I)
- PSET (PX(I), PY(I)), CV%(I)
- LIFE%(I) = LIFE%(I) - 1
- IF LIFE%(I) = 0 THEN
- NEEDINIT% = POINTSRAZLET * (RND + .5)
- FOR K = 1 TO PMAX
- IF STAT%(K) = 0 THEN
- STAT%(K) = 2
- PX(K) = PX(I)
- PY(K) = PY(I)
- SX(K) = (RND * 5) - 2.5
- SY(K) = (RND * 5) - 2.5
- LIFE%(K) = RAZLETLIFE * (RND + .5)
- CV%(K) = RND * 14 + 1
- NEEDINIT% = NEEDINIT% - 1
- IF NEEDINIT% = 0 THEN EXIT FOR
- END IF
- NEXT
- STAT%(I) = 0
- END IF
- ELSEIF STAT%(I) = 2 THEN
- PX(I) = PX(I) + SX(I)
- PY(I) = PY(I) + SY(I)
- PSET (PX(I), PY(I)), CV%(I)
- LIFE%(I) = LIFE%(I) - 1
- IF LIFE%(I) = 0 THEN STAT%(I) = 0
- END IF
- NEXT
- FLIP
- WEND
- SUB FLIP
- SWAP ACT%, VIZ%
- SCREEN , , , ACT%
- SCREEN , , VIZ%, ACT%
- WAIT &H3DA, 8
- END SUB
Рисунок 1 – Исходный текст для отрисовки анимации фейерверка
Рисунок 2 – Результат отрисовки анимации фейерверка
Спасибо за прочтение этой статьи.
Прикрепленные файлы: