打ち上げ花火 by 隊長

再生

 プチコン発売を記念した、「打ち上げ花火」のアニメーションが楽しめるデモプログラムだ。
 ドット単位で広がる花火がどうやって作られているのか……? プログラムを追って確認してほしい。

作ったのはこの人

隊長

スマイルブームでプログラマーを営む謎の「部隊長」。今回は仕事でもないのにプライベートでプログラムを組んでくれたぞ。


 CHECK POiNT 

インテリ
この花火は、全部グラフィック面を使って描いてあるんだね。メインループの中にGCLSがあるということは……

ワンパク
1コマごとに画面を消しては書き込んでるのかよ! ファック、こりゃまたチカラ技だな!

神崎
GPSETで点を打っているのかと思ったら、GLINEで放射状に書いてから余分な線を消していたんだね。

博士
昔のマシンでは処理が重くなって、なかなかこうはいかんかったものじゃよ。ありがたい時代じゃのう。

プログラムリスト

  1. ’ フ゜チコンハツハ゛イキネン ウチアケ゛ハナヒ゛
  2. VISIBLE 1,1,0,0,0,1
  3. CLS:GCLS:CLEAR
  4. DIM FX(10),FY(10),FS(10),FSPD(10),FH(10),FR(10),FC(10)
  5. DIM VX(20),VY(20)
  6. GOSUB @PALINIT
  7. FOR I=0 TO 9:FS(I)=-1:NEXT I
  8. GOSUB @MKTBL
  9. LOCATE 10,5:PRINT”フ゜チコン ハツハ゛イ”
  10. LOCATE 10,7:PRINT”  オメテ゛トウ!  ”
  11. ’ メインルーフ゜
  12. @LOOP
  13. FOR FI=0 TO 9
  14. ON FS(FI)+1 GOSUB @NEWFIRE,@UP,@BANG,@SPREAD,@BANG2,@SPREAD2,@FEND
  15. NEXT
  16. VSYNC 1
  17. GCLS
  18. GOTO @LOOP
  19. ’ アタラシイハナヒ゛ヲヨウイ
  20. @NEWFIRE
  21. IF RND(3)==1 THEN @NEWFIRE2
  22. FX(FI)=RND(192)+32
  23. FY(FI)=192
  24. FSPD(FI)=RND(5)+3
  25. FH(FI)=RND(60)+60
  26. FR(FI)=RND(40)+50
  27. BEEP 6,0,3
  28. FS(FI)=0
  29. RETURN
  30. @NEWFIRE2
  31. FX(FI)=RND(192)+32
  32. FY(FI)=192
  33. FSPD(FI)=RND(4)+6
  34. FR(FI)=RND(50)+60
  35. FS(FI)=3
  36. RETURN
  37. ’ ウチアケ゛
  38. @UP
  39. _S=FSPD(FI)
  40. FY(FI)=FY(FI)-_S
  41. FH(FI)=FH(FI)-_S
  42. _S=_S-0.2
  43. IF _S<1 THEN _S=1
  44. FSPD(FI)=_S
  45. IF FH(FI)<=0 THEN FS(FI)=1
  46. GPSET FX(FI),FY(FI),2
  47. RETURN
  48. ’ ハ゛クハツ
  49. @BANG
  50. FH(FI)=1
  51. FSPD(FI)=RND(3)+2
  52. FC(FI)=(RND(15)+1)*16
  53. GPSET FX(FI),FY(FI),FC(FI)
  54. BEEP 24,-8192
  55. FS(FI)=2
  56. RETURN
  57. ’ ヒロカ゛ッテイク
  58. @SPREAD
  59. _S=FSPD(FI)
  60. _H=FH(FI)
  61. _OH=_H
  62. _H=_H+_S
  63. _S=_S-0.4
  64. IF _S<1 THEN _S=1
  65. FSPD(FI)=_S
  66. FH(FI)=_H
  67. _XO=FX(FI)
  68. _YO=FY(FI)
  69. _C=FC(FI)+FLOOR(_H/FR(FI)*15)
  70. FOR _I=0 TO 19
  71. _VX=VX(_I):_VY=VY(_I)
  72. GLINE _OH*_VX+_XO,_OH*_VY+_YO,_H*_VX+_XO,_H*_VY+_YO,_C
  73. NEXT _I
  74. IF _H>=FR(FI) THEN FS(FI)=5
  75. RETURN
  76. ’ シ゛メンカラヒロカ゛ルハ゛アイノハ゛クハツ
  77. @BANG2
  78. FH(FI)=1
  79. FSPD(FI)=RND(3)+2
  80. FC(FI)=(RND(15)+1)*16
  81. FS(FI)=4
  82. RETURN
  83. ’ シ゛メンカラヒロカ゛ル
  84. @SPREAD2
  85. _S=FSPD(FI)
  86. _H=FH(FI)
  87. _OH=_H
  88. _H=_H+_S
  89. _S=_S-0.1
  90. IF _S<1 THEN _S=1
  91. FSPD(FI)=_S
  92. FH(FI)=_H
  93. _XO=FX(FI)
  94. _YO=FY(FI)
  95. _C=FC(FI)+FLOOR(_H/FR(FI)*15)
  96. FOR _I=13 TO 17
  97. _VX=VX(_I):_VY=VY(_I)
  98. GLINE _OH*_VX+_XO,_OH*_VY+_YO,_H*_VX+_XO,_H*_VY+_YO,_C
  99. NEXT _I
  100. IF _H>=FR(FI) THEN FS(FI)=5
  101. RETURN
  102. ’ アトシマツ
  103. @FEND
  104. FS(FI)=-1
  105. RETURN
  106. ’ エンヲカクタメノテーフ゛ルヲツクル
  107. @MKTBL
  108. FOR _I=0 TO 19
  109. _A=RAD(18*_I)
  110. VX(_I)=COS(_A)
  111. VY(_I)=SIN(_A)
  112. NEXT _I
  113. RETURN
  114. ’ カラーハ゜レットショキカ
  115. @PALINIT
  116. FOR _I=1 TO 12
  117. READ _RS,_GS,_BS,_RE,_GE,_BE
  118. FOR _J=0 TO 10
  119. _T=_J/10.0
  120. _R=_RS*(1.0-_T)+_RE*_T
  121. _G=_GS*(1.0-_T)+_GE*_T
  122. _B=_BS*(1.0-_T)+_BE*_T
  123. _COL=_I*16+_J
  124. GOSUB @PALSET
  125. NEXT _J
  126. FOR _J=11 TO 12
  127. _R=_RE:_G=_GE:_B=_BE
  128. _COL=_I*16+_J
  129. GOSUB @PALSET
  130. NEXT _J
  131. FOR _J=13 TO 15
  132. _T=((_J-13)+2)
  133. _R=_RE/_T:_G=_GE/_T:_B=_BE/_T
  134. _COL=_I*16+_J
  135. GOSUB @PALSET
  136. NEXT _J
  137. NEXT _I
  138. RETURN
  139. ’ イッコノイロヲカキコム 
  140. @PALSET
  141. _R$=”0”+HEX$(_R):_R$=MID$(_R$,LEN(_R$)-2,2)
  142. _G$=”0”+HEX$(_G):_G$=MID$(_G$,LEN(_G$)-2,2)
  143. _B$=”0”+HEX$(_B):_B$=MID$(_B$,LEN(_B$)-2,2)
  144. COLSET ”GRP”,_COL,_R$+_G$+_B$
  145. RETURN
  146. ’ ハ゜レットノモトテ゛ータ
  147. DATA 240,240,240,255,0,0
  148. DATA 200,100,0,  100,255,0
  149. DATA 100,100,255,255,255,0
  150. DATA 100,240,0,  0,0,255
  151. DATA 240,255,240,255,0,255
  152. DATA 255,0,0,    0,255,255
  153. DATA 240,0,100,  255,200,0
  154. DATA 0,255,0,    255,0,128
  155. DATA 100,0,255,  200,255,255
  156. DATA 255,100,0,  128,255,0
  157. DATA 100,255,0,  128,0,255
  158. DATA 240,240,0,  0,128,255