打ち上げ花火 by 隊長

再生

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

作ったのはこの人

隊長

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


 CHECK POiNT 

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

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

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

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

プログラムリスト

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