幾何学的な敵の動きが美しいシューティングゲーム。
操作は十字ボタン左右で回転、上下でスピード変化。何も押さないでいても自機はゆっくり前方に動くので要注意!
Aボタンで弾を発射。敵を全滅させて次のステージに進もう。ステージ開始時には一定時間の猶予があるので、有利なポジショニングを忘れずに。
次第にトリッキーになっていく敵を逃さず倒すことはできるかな!?
たけぽん
次はもう少し発展したシューティングゲーム作りに挑戦します!
- ’COSMIC COSINE И by タケホ゜ン И
- CLS:CLEAR:VISIBLE 1,1,0,0,1,1
- SPPAGE 0:GPAGE 0:GCLS
- DIM SX(16),SY(16),SC(16)
- DIM FX(11),FY(11),FD(11)
- DIM FS(11),FC(11),UD(19)
- DIM UX(19),UY(19),UC(19)
- DIM US(19),UP(19),UT(19)
- DIM UK(19),SP(11)
- FOR K=1 TO 8
- READ UP(K),UT(K),US(K):NEXT
- DATA 1,0,1,1,1,1,1,1.5,1
- DATA 2,0,2,2,1,2,2,1.5,2
- DATA 2,2,1,3,0,3
- FOR K=1 TO 4
- SPSET K,190,2,0,0,2
- SPOFS K,0,-32:NEXT
- FOR K=11 TO 18
- SPSET K,178,7,0,0,1
- SPANIM K,3,10,0:SPOFS K,0,-32
- NEXT
- @START1
- RO=1:SC=0:SK=2:RC=3:RS=3
- RP=0:GCLS:CLS:GOSUB @DSTAR
- SPSET 0,176,2,0,0,1
- GOSUB @USTART
- @START2
- X=128:Y=144:KD=90:KS=0.9:FS=0
- FP=0:DIE=0:BGMPLAY 23
- SPANIM 0,2,30,0
- @START3
- COLOR 15:LOCATE 0,0:?”SCORE”
- LOCATE 23,0:?”SCENE ”;RO
- LOCATE 24,23:?”LAST ”;SK;
- @MAIN
- ZD=KD:ZX=X:ZY=Y
- GOSUB @DRZAHYO:SPOFS 0,ZX,ZY
- SPANGLE 0,KD:GOSUB @KEYIN
- KDX=KS*COS(RAD(KD)):X=X-KDX
- KDY=KS*SIN(RAD(KD)):Y=Y-KDY
- IF X<0 THEN X=X+256
- IF X>255 THEN X=X-256
- IF Y<0 THEN Y=Y+192
- IF Y>192 THEN Y=Y-192
- GOSUB @MSTAR
- GOSUB @FSTART
- GOSUB @FMOVE
- GOSUB @UMOVE
- IF UW==0 THEN @PCL
- IF DIE==1 THEN @DIE
- GOTO @MAIN
- @PCL
- RO=RO+1:IF RO<9 THEN @PC1
- IF RO==9 THEN RQ=1
- RQ=RQ+0.5:RP=RP+1
- IF RP<RC THEN @PC1
- RC=RC+1:RP=0:RQ=1
- @PC1
- GOSUB @USTART
- GOTO @START3
- @DRZAHYO
- ZD=ZD+45
- IF ZD>360 THEN ZD=ZD-360
- ZX=ZX-11.3*COS(RAD(ZD))
- ZY=ZY-11.3*SIN(RAD(ZD))
- RETURN
- @KEYIN
- B=BUTTON():FS=0
- IF B AND 16 THEN FS=1
- IF B AND 8 THEN KD=KD+5
- IF B AND 4 THEN KD=KD-5
- IF KD>=360 THEN KD=KD-360
- IF KD<0 THEN KD=KD+360
- IF B AND 1 THEN KS=KS+0.4
- IF KS>5 THEN KS=5
- IF B AND 2 THEN KS=KS-0.4
- IF KS<-0.8 THEN KS=-0.8
- IF KS>0.9 THEN KS=KS-0.1
- IF KS<0.9 THEN KS=KS+0.1
- RETURN
- @DSTAR
- FOR K=0 TO 15
- SX(K)=RND(256):SY(K)=RND(192)
- SC(K)=RND(128)+128
- GPSET SX(K),SY(K),SC(K)
- NEXT:RETURN
- @MSTAR
- FOR K=0 TO 15:SC(K)=SC(K)+1
- IF SC(K)>255 THEN SC(K)=128
- B=3:IF K>7 THEN B=6
- GPSET SX(K),SY(K),0
- SX(K)=SX(K)-KDX/B:V=SX(K)
- IF V<0 THEN SX(K)=SX(K)+256
- IF V>255 THEN SX(K)=SX(K)-256
- SY(K)=SY(K)-KDY/B:V=SY(K)
- IF V<0 THEN SY(K)=SY(K)+192
- IF V>191 THEN SY(K)=SY(K)-192
- GPSET SX(K),SY(K),SC(K)
- NEXT:RETURN
- @FSTART
- FP=FP-1:IF FP>0 THEN RETURN
- IF FS==0 THEN RETURN
- K=1
- @FS1
- IF FC(K)<1 THEN @FS2
- K=K+1:IF K<5 THEN @FS1
- RETURN
- @FS2
- FP=11:FC(K)=1:FX(K)=X:FY(K)=Y
- FD(K)=KD:FS(K)=KS+4
- SPOFS K,X,Y:RETURN
- @FMOVE
- FOR K=1 TO 4
- IF FC(K)<1 THEN @FM1
- FDX=FS(K)*COS(RAD(FD(K)))
- FDY=FS(K)*SIN(RAD(FD(K)))
- FX(K)=FX(K)-FDX
- FY(K)=FY(K)-FDY
- IF FX(K)<0 THEN @FM2
- IF FX(K)>255 THEN @FM2
- IF FY(K)<0 THEN @FM2
- IF FY(K)>191 THEN @FM2
- SPOFS K,FX(K)-8,FY(K)-8
- FOR J=11 TO 18
- IF UC(J)!=1 THEN @FM3
- IF UX(J)>FX(K)+8 THEN @FM3
- IF UX(J)<FX(K)-8 THEN @FM3
- IF UY(J)>FY(K)+8 THEN @FM3
- IF UY(J)<FY(K)-8 THEN @FM3
- UC(J)=2:FC(K)=0:SPOFS K,0,-32
- @FM3
- NEXT
- @FM1
- NEXT:RETURN
- @FM2
- SPOFS K,O,-32:FC(K)=0
- GOTO @FM1
- @UICHI
- V=COS(RAD(UD(K)))
- UX(K)=128+120*V*UK(K)
- V=SIN(RAD(UD(K)))
- UY(K)=96+88*V*UK(K)
- SPOFS K,UX(K)-8,UY(K)-8
- RETURN
- @USTART
- J=0:UW=8:BEEP 5
- IF RO<9 THEN @US1
- UP=RS:UT=2:US=RC-2:GOTO @US2
- @US1
- UP=UP(RO):UT=2:US=US(RO)
- RQ=UT(RO):IF RQ==0 THEN UT=1
- @US2
- :FOR K=11 TO 18:UD(K)=J
- UC(K)=-75
- SPCHR K,178,15,0,0,1
- SPANIM K,3,5,0:J=J+UP*11
- NEXT:RETURN
- @UMOVE
- FOR K=11 TO 18
- IF UC(K)==1 THEN @UM0
- IF UC(K)==0 THEN @UME
- IF UC(K)>1 THEN @UMB
- IF UC(K)>-75 THEN @UMF
- @UM0
- UD(K)=UD(K)+US:V=UD(K)
- IF V>360 THEN UD(K)=UD(K)-360
- UK(K)=1:IF UT!=2 THEN @UML
- J=RQ*UD(K)
- @UM4
- IF J<=360 THEN @UM5
- J=J-360:GOTO @UM4
- @UM5
- UK(K)=COS(RAD(J))
- @UML
- GOSUB @UICHI
- IF UC(K)<0 THEN @UMF
- FOR I=1 TO 4
- IF FC(I)!=1 THEN @UMD
- IF FX(I)>UX(K)+8 THEN @UMD
- IF FX(I)<UX(K)-8 THEN @UMD
- IF FY(I)>UY(K)+8 THEN @UMD
- IF FY(I)<UY(K)-8 THEN @UMD
- FC(I)=0:UC(K)=2:SPOFS I,0,-32
- @UMD
- NEXT
- IF X>UX(K)+8 THEN @UME
- IF X<UX(K)-8 THEN @UME
- IF Y>UY(K)+8 THEN @UME
- IF Y<UY(K)-8 THEN @UME
- DIE=1
- @UME
- NEXT:RETURN
- @UMB
- IF UC(K)>2 THEN @UMB1
- BEEP 12:SC=SC+10:GOSUB @SCORE
- SPCHR K,248:SPANIM K,8,4,1
- @UMB1
- UC(K)=UC(K)+1
- IF UC(K)<23 THEN @UME
- UC(K)=0:SPOFS K,0,-32:UW=UW-1
- GOTO @UME
- @UMF
- UC(K)=UC(K)+1
- IF UC(K)<-1 THEN @UME
- UC(K)=1:SPCHR K,178,7,0,0,1
- SPANIM K,3,5,0
- GOTO @UME
- @SCORE
- LOCATE 6,0:? SC;:RETURN
- @DIE
- SPCHR 0,248:SPANIM 0,8,10,0
- BGMSTOP:BEEP 13:VSYNC 90
- SK=SK-1:IF SK<0 THEN @OVER
- SPCHR 0,176:GOTO @START2
- @OVER
- BEEP 34
- LOCATE 11,8:?”GAME OVER”
- @OV1
- B=BUTTON():IF B!=0 THEN @OV1
- LOCATE 10,1?:?”HIT A BUTTON”
- @OV2
- B=BUTTON()
- IF B AND 1024 THEN END
- IF B AND 16 THEN @START1
- GOSUB @MSTAR
- GOTO @OV2