プチコン発売を記念した、「打ち上げ花火」のアニメーションが楽しめるデモプログラムだ。
ドット単位で広がる花火がどうやって作られているのか……? プログラムを追って確認してほしい。
隊長
スマイルブームでプログラマーを営む謎の「部隊長」。今回は仕事でもないのにプライベートでプログラムを組んでくれたぞ。
GCLS
があるということは……GPSET
で点を打っているのかと思ったら、GLINE
で放射状に書いてから余分な線を消していたんだね。
- ’
- ’ フ゜チコンハツハ゛イキネン ウチアケ゛ハナヒ゛
- ’
- VISIBLE 1,1,0,0,0,1
- CLS:GCLS:CLEAR
- DIM FX(10),FY(10),FS(10),FSPD(10),FH(10),FR(10),FC(10)
- DIM VX(20),VY(20)
- GOSUB @PALINIT
- FOR I=0 TO 9:FS(I)=-1:NEXT I
- GOSUB @MKTBL
- LOCATE 10,5:PRINT”フ゜チコン ハツハ゛イ”
- LOCATE 10,7:PRINT” オメテ゛トウ! ”
- ’ メインルーフ゜
- @LOOP
- FOR FI=0 TO 9
- ON FS(FI)+1 GOSUB @NEWFIRE,@UP,@BANG,@SPREAD,@BANG2,@SPREAD2,@FEND
- NEXT
- VSYNC 1
- GCLS
- GOTO @LOOP
- ’ アタラシイハナヒ゛ヲヨウイ
- @NEWFIRE
- IF RND(3)==1 THEN @NEWFIRE2
- FX(FI)=RND(192)+32
- FY(FI)=192
- FSPD(FI)=RND(5)+3
- FH(FI)=RND(60)+60
- FR(FI)=RND(40)+50
- BEEP 6,0,3
- FS(FI)=0
- RETURN
- @NEWFIRE2
- FX(FI)=RND(192)+32
- FY(FI)=192
- FSPD(FI)=RND(4)+6
- FR(FI)=RND(50)+60
- FS(FI)=3
- RETURN
- ’ ウチアケ゛
- @UP
- _S=FSPD(FI)
- FY(FI)=FY(FI)-_S
- FH(FI)=FH(FI)-_S
- _S=_S-0.2
- IF _S<1 THEN _S=1
- FSPD(FI)=_S
- IF FH(FI)<=0 THEN FS(FI)=1
- GPSET FX(FI),FY(FI),2
- RETURN
- ’ ハ゛クハツ
- @BANG
- FH(FI)=1
- FSPD(FI)=RND(3)+2
- FC(FI)=(RND(15)+1)*16
- GPSET FX(FI),FY(FI),FC(FI)
- BEEP 24,-8192
- FS(FI)=2
- RETURN
- ’ ヒロカ゛ッテイク
- @SPREAD
- _S=FSPD(FI)
- _H=FH(FI)
- _OH=_H
- _H=_H+_S
- _S=_S-0.4
- IF _S<1 THEN _S=1
- FSPD(FI)=_S
- FH(FI)=_H
- _XO=FX(FI)
- _YO=FY(FI)
- _C=FC(FI)+FLOOR(_H/FR(FI)*15)
- FOR _I=0 TO 19
- _VX=VX(_I):_VY=VY(_I)
- GLINE _OH*_VX+_XO,_OH*_VY+_YO,_H*_VX+_XO,_H*_VY+_YO,_C
- NEXT _I
- IF _H>=FR(FI) THEN FS(FI)=5
- RETURN
- ’ シ゛メンカラヒロカ゛ルハ゛アイノハ゛クハツ
- @BANG2
- FH(FI)=1
- FSPD(FI)=RND(3)+2
- FC(FI)=(RND(15)+1)*16
- FS(FI)=4
- RETURN
- ’ シ゛メンカラヒロカ゛ル
- @SPREAD2
- _S=FSPD(FI)
- _H=FH(FI)
- _OH=_H
- _H=_H+_S
- _S=_S-0.1
- IF _S<1 THEN _S=1
- FSPD(FI)=_S
- FH(FI)=_H
- _XO=FX(FI)
- _YO=FY(FI)
- _C=FC(FI)+FLOOR(_H/FR(FI)*15)
- FOR _I=13 TO 17
- _VX=VX(_I):_VY=VY(_I)
- GLINE _OH*_VX+_XO,_OH*_VY+_YO,_H*_VX+_XO,_H*_VY+_YO,_C
- NEXT _I
- IF _H>=FR(FI) THEN FS(FI)=5
- RETURN
- ’ アトシマツ
- @FEND
- FS(FI)=-1
- RETURN
- ’ エンヲカクタメノテーフ゛ルヲツクル
- @MKTBL
- FOR _I=0 TO 19
- _A=RAD(18*_I)
- VX(_I)=COS(_A)
- VY(_I)=SIN(_A)
- NEXT _I
- RETURN
- ’ カラーハ゜レットショキカ
- @PALINIT
- FOR _I=1 TO 12
- READ _RS,_GS,_BS,_RE,_GE,_BE
- FOR _J=0 TO 10
- _T=_J/10.0
- _R=_RS*(1.0-_T)+_RE*_T
- _G=_GS*(1.0-_T)+_GE*_T
- _B=_BS*(1.0-_T)+_BE*_T
- _COL=_I*16+_J
- GOSUB @PALSET
- NEXT _J
- FOR _J=11 TO 12
- _R=_RE:_G=_GE:_B=_BE
- _COL=_I*16+_J
- GOSUB @PALSET
- NEXT _J
- FOR _J=13 TO 15
- _T=((_J-13)+2)
- _R=_RE/_T:_G=_GE/_T:_B=_BE/_T
- _COL=_I*16+_J
- GOSUB @PALSET
- NEXT _J
- NEXT _I
- RETURN
- ’ イッコノイロヲカキコム
- @PALSET
- _R$=”0”+HEX$(_R):_R$=MID$(_R$,LEN(_R$)-2,2)
- _G$=”0”+HEX$(_G):_G$=MID$(_G$,LEN(_G$)-2,2)
- _B$=”0”+HEX$(_B):_B$=MID$(_B$,LEN(_B$)-2,2)
- COLSET ”GRP”,_COL,_R$+_G$+_B$
- RETURN
- ’ ハ゜レットノモトテ゛ータ
- DATA 240,240,240,255,0,0
- DATA 200,100,0, 100,255,0
- DATA 100,100,255,255,255,0
- DATA 100,240,0, 0,0,255
- DATA 240,255,240,255,0,255
- DATA 255,0,0, 0,255,255
- DATA 240,0,100, 255,200,0
- DATA 0,255,0, 255,0,128
- DATA 100,0,255, 200,255,255
- DATA 255,100,0, 128,255,0
- DATA 100,255,0, 128,0,255
- DATA 240,240,0, 0,128,255