スプライトの回転・拡大縮小と、回転運動のサンプルプログラムだ。
操作方法はいわゆるラジコン型。十字ボタン左右で進行方向を回転させて、十字ボタン上下でスピードを増減することになる。
Aボタンで弾を発射。プレイヤー機をしつこく追ってくる敵機に当てると、小さな敵機に分裂するぞ。
- ’┌──────────────────────────┐
- ’│GALAXY01 v1.0 │
- ’└──────────────────────────┘
- VISIBLE 1,1,1,1,1,1
- CLS:COLOR 0
- GPAGE 0:GCOLOR 0:GCLS
- SPPAGE 0:SPCLR
- BGPAGE 0
- CLEAR
- ’---
- DIM E(16,10),CL(4)
- DATA 14,11,9,0
- FOR I=0 TO 3:READ CL(I):NEXT
- _X=0:_Y=1:_C=2:_L=3
- _W=4:_N=5:_A=6:_S=7
- _V=8
- ECNT=10
- ’---
- FL=0:RQ=FL:BGMW=FALSE
- GOSUB @TINIT
- ’---
- @LOOP
- OLDB=B:B=BUTTON()
- ’
- GOSUB @FLOW
- ’
- VSYNC(1)
- GOTO @LOOP
- END
- ’───────────────────────────
- @FLOW ’カ゛メンセンイ
- ’───────────────────────────
- IF RQ==FL GOTO @FLJUMP
- IF BGMW AND BGMCHK() THEN RETURN
- BGMW=FALSW
- ’--- アタラシイ カ゛メンヘ
- ON RQ GOSUB @TINIT,@SSINIT,@GINIT,@OVINIT,@SCINIT
- FL=RQ
- ’--- カ゛メンコ゛トノショリヘ
- @FLJUMP
- ON FL GOTO @TIT,@SSTART,@GAME,@GOVER,@SCLEAR
- RETURN
- ’───────────────────────────
- ’
- ’───────────────────────────
- @ANYBUT
- R=FALSE
- IF OLDB THEN RETURN
- IF B==0 THEN RETURN
- R=TRUE
- RETURN
- ’---
- @SE
- P=(128/23)*X
- V=(100/23)*Y+27
- BEEP B,F,V,P
- RETURN
- ’───────────────────────────
- @TIT
- ’───────────────────────────
- GOSUB @TITPUT
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- BGMSTOP
- RQ=1
- RETURN
- ’---
- @TINIT
- CLS:BGMPLAY 28
- GOSUB @BGINIT
- STG=0
- ’---
- SPCLR
- FOR I=0 TO 31
- SPSET I,156,3,0,0,1
- SPOFS I,120,88
- NEXT
- ’---
- @TITPUT
- I=(C/4) AND 7
- IF I>3 THEN I=7-I
- COLOR CL(I):C=C+1
- X=6:Y=8
- LOCATE X,Y+0:PRINT”┗┏┳┏┓┛ ┳┏┓┫┳━┫┳━┗┫┳┛”
- LOCATE X,Y+1:PRINT”┛┻┻┠┛┛ ┻┠┛ ┛ ┛ ┛┻ ┛”
- LOCATE X,Y+2:PRINT”┫┨┻ ┛┯┠┻ ┛┗┃┓ ┛ ┫┗ ┛”
- COLOR 9:X=8:Y=Y+7
- LOCATE X,Y:PRINT”PUSH ANY BUTTON!”
- COLOR 2:X=4:Y=Y+5
- LOCATE X,Y:PRINT”(C)2011 SmileBoom Co.Ltd.”
- ’---
- FOR I=0 TO 31
- IF SPCHK(I) GOTO @TISKIP
- ’--- RESET
- SPOFS I,120,88
- SPSCALE I,0,0
- ’--- NEW
- R=RND(60)+15
- SPOFS I,RND(256),RND(192),R
- SPSCALE I,50,R
- @TISKIP
- NEXT
- RETURN
- ’───────────────────────────
- @SSTART
- ’───────────────────────────
- W=W-1:IF W<0 GOTO @_SIEND
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- @_SIEND
- RQ=2
- RETURN
- ’---
- @SSINIT
- CLS:BGMSTOP
- X=13:Y=11:W=60*1
- LOCATE X,Y:PRINT”Ready?”
- FOR I=0 TO 31
- SPOFS I,120,88,15
- SPSCALE I,0,15
- NEXT
- RETURN
- ’---
- @BGINIT
- BGOFS 0,0,0
- BGOFS 1,0,0
- FOR Y=0 TO 63
- FOR X=0 TO 63
- BGPUT 0,X,Y,0,0,0,0
- BGPUT 1,X,Y,0,0,0,0
- NEXT
- NEXT
- RETURN
- ’───────────────────────────
- @SCLEAR
- ’───────────────────────────
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- RQ=3
- RETURN
- ’
- @SCINIT
- CLS:BGMPLAY 9
- X=13:Y=11:W=60*1
- LOCATE X,Y:PRINT”CLEAR!”
- RETURN
- ’───────────────────────────
- @GOVER
- ’───────────────────────────
- GLINE MX*8,MY*8,RND(256),RND(256),RND(256)
- GCIRCLE MX*8,MY*8,RND(100)+2,RND(256)
- IF BGMCHK() THEN RETURN
- GOSUB @ANYBUT
- IF R==FALSE THEN RETURN
- ’---
- GCLS:SPCLR
- RQ=0
- RETURN
- ’---
- @OVINIT
- CLS:BGMPLAY 6:BGMW=TRUE
- X=11:Y=11
- LOCATE X,Y:PRINT”GAME OVER”
- RETURN
- ’───────────────────────────
- @GAME
- ’───────────────────────────
- GOSUB @MYSHIP
- GOSUB @SHOT
- GOSUB @ENEMY
- ’GOSUB @PUTSCO
- GOSUB @MAPSCRL
- ’
- RETURN
- ’---
- @MAPSCRL
- GX=GX+GVX
- GY=GY+GVY
- BGOFS 0,GX*2,GY*2
- BGOFS 1,GX,GY
- RETURN
- ’---
- @MYSHIP
- ’--- ニュウリョクカクニン
- GOSUB @GETVEC
- ’---
- RETURN
- ’
- @MYCLR
- BEEP 32
- STG=STG+1
- IF STG==4 THEN RQ=4:RETURN
- ’---
- BGMPLAY 4
- BGMW=TRUE
- RQ=1
- RETURN
- ’---
- @GETVEC
- C=B AND 15:S=3
- IF C==4 THEN MA=MA-S:IF MA<0 THEN MA=MA+360
- IF C==8 THEN MA=MA+S:IF MA>360 THEN MA=MA-360
- IF C==1 THEN MV=MV+0.05:IF MV>2 THEN MV=2
- IF C==2 THEN MV=MV-0.05:IF MV<1 THEN MV=1
- R=RAD(MA)
- VX=COS(R)*MV
- VY=SIN(R)*MV
- MX=MX+VX:MY=MY+VY
- IF MX<16 THEN MX=16
- IF MX>239 THEN MX=240
- IF MY<16 THEN MY=16
- IF MY>175 THEN MY=176
- GVX=VX:GVY=VY
- I=0:X=MX:Y=MY:A=MA:S=MS:F=TRUE
- GOSUB @SETOFSP
- RETURN
- ’---
- @DEAD
- BEEP 55,-2000
- RQ=3
- RETURN
- ’---
- @SHOT
- IF QC GOTO @QMOVE
- IF (B AND 16)==0 THEN RETURN
- ’--- ハッセイ
- QC=1:QA=MA:QV=1.0
- QX=MX:QY=MY
- ’--- イト゛ウ
- @QMOVE
- X=QX:Y=QY:R=RAD(QA)
- VX=COS(R)*QV
- VY=SIN(R)*QV
- X=X+VX
- Y=Y+VY
- IF X<-16 THEN QC=0
- IF X>272 THEN QC=0
- IF Y<-16 THEN QC=0
- IF Y>208 THEN QC=0
- QV=QV+0.5
- QX=X:QY=Y
- I=2
- SPOFS I,X-8,Y-8
- RETURN
- ’---
- @ENEMY
- I=3:F=FALSE
- FOR J=0 TO ECNT-1
-
- ’--- アキ?
- IF E(J,_C)==0 GOTO @ENEXT
-
- ’--- タマニアタッタ?
- X=E(J,_X):Y=E(J,_Y)
- S=E(J,_S)
- IF QC==0 GOTO @EROLL
- IF X-8*S>QX GOTO @EROLL
- IF X+8*S<QX GOTO @EROLL
- IF Y-8*S>QY GOTO @EROLL
- IF Y+8*S<QY GOTO @EROLL
-
- ’--- アタリ
- GOSUB @SHOTDEAD
- E(J,_C)=0
- L=E(J,_L)
- IF L==3 GOTO @ENEXT
-
- ’--- フ゛ンリ
- L=L+1:S=S*0.75
- FOR JJ=0 TO L
- GOSUB @EBORN
- NEXT JJ
- GOTO @ENEXT
-
- ’---
- @EROLL
- A=E(J,_A):B=FLOOR(A)
- C=FLOOR(E(J,_N))
- IF B==C GOTO @ESKIP
-
- ’--- カクト゛アワセ
- B=B+E(J,_V)
- IF B>360 THEN B=B-360
- IF B<0 THEN B=B+360
- E(J,_A)=B:A=B
- V=0
- IF B!=C GOTO @EMOVE
- E(J,_V)=8
- GOTO @EMOVE
-
- ’---
- @ESKIP
- V=E(J,_V):V=V-0.5
- E(J,_V)=V
- IF V>0 GOTO @EMOVE
-
- ’--- ネラウ
- D=ATAN(MY-Y,MX-X)
- N=DEG(D)
- IF N<0 THEN N=N+360
- IF N>360 THEN N=N-360
- E(J,_N)=N
- B=A-N:C=A+360-N:V=SGN(B)
- IF ABS(B)>ABS(C) GOTO @EAVEC
- V=SGN(C)
- @EAVEC
- E(J,_V)=V
- GOTO @ENEXT
-
- ’--- イト゛ウ
- @EMOVE
- R=RAD(A)
- VX=COS(R)*V
- VY=SIN(R)*V
- X=X+VX:E(J,_X)=X
- Y=Y+VY:E(J,_Y)=Y
- GOSUB @SETOFS
-
- ’---
- @ENEXT
- I=I+1
-
- NEXT J
- RETURN
- ’---
- @SHOTDEAD
- QC=0:QX=-64
- SPOFS 2,QX,QY
- RETURN
- ’---
- @PUTSCO
- X=0:Y=1
- LOCATE X,Y:PRINT” ”
- LOCATE X,Y:PRINT SCO
- X=X+10
- LOCATE X,Y:PRINT” ”
- LOCATE X,Y:PRINT MV
- X=X+10
- LOCATE X,Y:PRINT” ”
- LOCATE X,Y:PRINT DOT
- RETURN
- ’---
- @GINIT
- CLS:SPCLR
- BGMPLAY 17
- BGCLIP 0,2,31,23
- ’---
- GX=0:GY=0:GVX=0:GVY=0
- WX=33:BY=0:SY=22
- YY=0:WX2=33
- ’---
- COLOR 7
- X=0:Y=0
- LOCATE X,Y:PRINT”SCORE”;
- X=X+10
- LOCATE X,Y:PRINT”SPEED”;
- X=X+10
- LOCATE X,Y:PRINT”REST”;
- LOCATE 0,23:PRINT”STAGE:”;
- PRINT STG+1;
- COLOR 0
- ’--- BGクリア
- FOR I=0 TO 100
- X=RND(64):Y=RND(64)
- BGPUT 0,X,Y,&H35B,12,0,0
- X=RND(64):Y=RND(64)
- BGPUT 1,X,Y,&H37B,12,0,0
- NEXT
- ’--- シ゛フ゛ン
- PR=1:SCO=0:I=0:F=TRUE
- MX=120:MY=88
- MA=0:MS=1.0:MV=1.0
- SPSET I,136,2,0,0,PR
- SPSET I+1,40,0,0,0,PR
- SPANIM I+1,2,3,0
- X=MX:Y=MY:A=MA:GOSUB @SETOFS
- SPSET I+2,10,0,0,0,0
- GOSUB @SETOFSP
- ’--- タマ
- I=2:QX=-64:QY=QX
- QV=1.0:QC=0
- SPSET I,142,4,0,0,PR
- SPOFS I,QX,QY
- SPANIM I,2,4,0
- ’--- テキ
- I=3:S=2.0:F=FALSE
- FOR J=0 TO ECNT-1
- SPSET I,136,10,0,0,PR
- SPOFS I,-64,-64
- E(J,_C)=0
- I=I+1
- NEXT
- ’---
- L=0
- X=RND(256):Y=RND(192)
- GOSUB @EBORN
- RETURN
- ’--- アタラシイテキノセイセイ
- @EBORN
- II=3
- FOR K=0 TO ECNT-1
- IF E(K,_C)==0 GOTO @EMAKE
- II=II+1
- NEXT K
- RETURN
- ’---
- @EMAKE
- E(K,_C)=1
- E(K,_X)=X:E(K,_Y)=Y
- E(K,_S)=S:E(K,_L)=L
- E(K,_V)=0.0
- A=RND(360)
- E(K,_A)=A
- E(K,_N)=A
- TMP=I:I=II
- GOSUB @SETOFS
- I=TMP
- RETURN
- ’───────────────────────────
- ’カイテンヲコウリョシタヒョウシ゛
- ’───────────────────────────
- @SETOFS ’I,X,Y,A,S
- D=A+45:D=D%360
- D=RAD(D)
- R=9.8 :’SQR(7*7+7*7)
- R=R*S
- X=X-COS(D)*R
- Y=Y-SIN(D)*R
- SPOFS I,X,Y
- SPANGLE I,A
- SPSCALE I,S*100
- RETURN
- ’--- ホノオツキ
- @SETOFSP
- GOSUB @SETOFS
- ’---
- D=RAD(A)
- ’R=9.8 :’テキト゛ナキョリ
- X=X-COS(D)*R
- Y=Y-SIN(D)*R
- SPOFS I+1,X,Y
- SPANGLE I+1,A
- SPSCALE I+1,S*100
- RETURN