QBASICBOOK.ru: сайт про QB64

Опубликовано: 2020-06-30 08:00:00

Анимация фейерверка

В этой статье представлена неплохая реализации отрисовки анимации фейерверка.

Рассмотрим исходный текст программы:


  1. DECLARE SUB FLIP ()
  2.  
  3. CONST PMAX = 250
  4. CONST POINTSRAZLET = 25
  5. CONST RAZLETLIFE = 40
  6. CONST SNARYADLIFE = 100
  7.  
  8. DIM PX(PMAX), PY(PMAX), CV%(PMAX)
  9. DIM SX(PMAX), SY(PMAX), LIFE%(PMAX)
  10. DIM STAT%(PMAX)
  11. DIM SCHET%
  12.  
  13. '  EKRAN
  14. DIM SHARED ACT%, VIZ%
  15. ACT% = 1: VIZ% = 0
  16. SCREEN 9, , VIZ%, ACT%
  17. WHILE INKEY$ = ""
  18.     SCHET% = (SCHET% + 1) AND 3
  19.     IF SCHET% = 0 THEN
  20.         FOR I = 1 TO PMAX
  21.             IF STAT%(I) = 0 THEN
  22.                 STAT%(I) = 1
  23.                 PX(I) = 320 'RND * 320 + 160
  24.                 PY(I) = 349
  25.                 CV%(I) = RND * 15
  26.                 SX(I) = (RND * 5) - 2.5
  27.                 SY(I) = -(RND * 1 + 2)
  28.                 LIFE%(I) = SNARYADLIFE * ((RND + 1) / 2)
  29.                 EXIT FOR
  30.             END IF
  31.         NEXT
  32.     END IF
  33.  
  34.     CLS 2
  35.  
  36.     LINE (0, 336)-(639, 349), 0, BF
  37.     FOR I = 1 TO PMAX
  38.         IF STAT%(I) = 1 THEN
  39.             PX(I) = PX(I) + SX(I)
  40.             PY(I) = PY(I) + SY(I)
  41.             CIRCLE (PX(I), PY(I)), 1, CV%(I)
  42.             PSET (PX(I), PY(I)), CV%(I)
  43.             LIFE%(I) = LIFE%(I) - 1
  44.             IF LIFE%(I) = 0 THEN
  45.                 NEEDINIT% = POINTSRAZLET * (RND + .5)
  46.                 FOR K = 1 TO PMAX
  47.                     IF STAT%(K) = 0 THEN
  48.                         STAT%(K) = 2
  49.                         PX(K) = PX(I)
  50.                         PY(K) = PY(I)
  51.                         SX(K) = (RND * 5) - 2.5
  52.                         SY(K) = (RND * 5) - 2.5
  53.                         LIFE%(K) = RAZLETLIFE * (RND + .5)
  54.                         CV%(K) = RND * 14 + 1
  55.                         NEEDINIT% = NEEDINIT% - 1
  56.                         IF NEEDINIT% = 0 THEN EXIT FOR
  57.                     END IF
  58.                 NEXT
  59.                 STAT%(I) = 0
  60.             END IF
  61.         ELSEIF STAT%(I) = 2 THEN
  62.             PX(I) = PX(I) + SX(I)
  63.             PY(I) = PY(I) + SY(I)
  64.             PSET (PX(I), PY(I)), CV%(I)
  65.             LIFE%(I) = LIFE%(I) - 1
  66.             IF LIFE%(I) = 0 THEN STAT%(I) = 0
  67.         END IF
  68.     NEXT
  69.     FLIP
  70. WEND
  71. SUB FLIP
  72. SWAP ACT%, VIZ%
  73. SCREEN , , , ACT%
  74. SCREEN , , VIZ%, ACT%
  75. WAIT &H3DA, 8
  76. END SUB

исунок 1 – Исходный текст для отрисовки вертикального меню

Рисунок 1 – Исходный текст для отрисовки анимации фейерверка

 Рисунок 2 – Результат отрисовки  анимации фейерверка

Рисунок 2 – Результат отрисовки  анимации фейерверка

 

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:
 

< Предыдущая статья
Отрисовка вертикального меню
Следующая статья >
Рисуем счеты

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.