最初にサンプル動画を撮ったらあまりのスピードにコマ落ちしすぎて使い物にならなかったという、トンデモないハイスピードシューティング(そこでサンプル動画ではフレームレートを思いきり落として撮影している。ゴメン!)。
操作は十字ボタンで移動、Aボタンでショット。ノーミスで「P」のパワーカプセルを取り続けると3段階までショットがパワーアップするぞ。
「B」のボーナスカプセルもノーミス・連続で取ればボーナス点が上昇。ハイスコアを目指せ!
たけぽん
BASICだけでここまで遊べるゲームが作れるなんて、昔の8ビットのマイコンでは考えられないことでした。
ゲームでスピードを出すためにはマシン語を使いましたが、複雑な計算ができませんでした。
25〜30年くらい前にプチコンがあったら、もっといろいろゲームを作ったんだろうなと思います(私はいわゆるマイコン少年でしたが、結局コンピューター関係の仕事には進みませんでした。プチコンにはまるのは、その反動かも……)。
- ’COSMIC BLASTER И by タケホ゜ン И
- CLS:CLEAR:VISIBLE 1,1,1,1,1,0
- BGPAGE 0:BGCLIP 0,0,31,23
- SPPAGE 0:HI=1000:GOSUB @BGCL
- GOSUB @BGSTAR
- GOSUB @CYARA
- DIM GR(4),GN(4),GD(35),GK(35)
- DIM GJ(35),GX(35),GY(35)
- DIM GB(35),GH(35),GL(35)
- DIM TD(17),TX(17),TY(17)
- DIM TW(17)
- DIM ED(21),EX(21),EY(21)
- DIM EM(21),EN(21),ES(21)
- FOR I=0 TO 70:SPCLR I:NEXT
- FOR J=11 TO 34
- SPSET J,140,5,0,0,1:NEXT
- SPSET 0,176,2,0,0,1
- FOR K=1 TO 12
- SPSET K+80,190,2,0,0,0:NEXT
- FOR K=1 TO 20
- SPSET K+50,214,2,0,0,0:NEXT
- SPSET 80,232,2,0,0,0
- @START1
- CLS:SC=0:RO=1:LI=1:VL=2:PD=0
- BGL1=320:BGX1=128:LT=0
- BGL2=320:BGX2=128:UP=0
- FOR K=11 TO 34:GD(K)=0
- SPOFS K,0,-32:NEXT
- FOR K=1 TO 12:TD(K)=0
- SPOFS K+80,0,-32:NEXT
- FOR K=1 TO 20:ED(K)=0
- SPOFS K+50,0,-32:NEXT
- SPOFS 80,0,-32
- @START2
- LK=30:LH=0:SPCHR 0,176
- SPANIM 0,2,50,0:SPANGLE 0,90
- SPOFS 0,VX+8,VY-8
- @START3
- COLOR 0:IF LT>0 THEN @STA3
- BGMPLAY 13:GOTO @STA5
- @STA3
- BGMPLAY 2
- @STA5
- LOCATE 0,0:?”SCORE”
- GOSUB @DRAWSC:LOCATE 21,0
- ?”HIGH”:GOSUB @DRAWHI
- GOSUB @DRAWVL:COLOR 13
- VX=128:VY=120:TK=1:TP=0:LH=0
- VD=0:EK=0:JK=0:VP=0:PJ=8
- PH=100:LOCATE 13,8:?”READY!”
- @START4
- GOSUB @KEYIN
- GOSUB @JIMOVE
- GOSUB @MSTART
- GOSUB @MMOVE
- GOSUB @TMOVE
- GOSUB @EMOVE
- GOSUB @PMOVE
- GOSUB @SCROLL:VSYNC 2:JK=JK+1
- IF JK<100 THEN @START4
- VD=0:LOCATE 13,8:?” ”
- @MAIN
- GOSUB @TSTART
- GOSUB @KEYIN
- GOSUB @JIMOVE
- GOSUB @MSTART
- GOSUB @MMOVE
- IF VP==2 AND TH==1 THEN @MAI2
- VSYNC 1
- @MAI2
- GOSUB @TMOVE
- GOSUB @ESTART
- GOSUB @EMOVE
- GOSUB @PSTART
- GOSUB @PMOVE
- GOSUB @SCROLL
- IF VD==1 THEN @DIE
- VSYNC 1:GOTO @MAIN
- @TSTART
- IF LH==1 THEN @TSH
- LK=LK-1:IF LK>0 THEN RETURN
- LK=100-LI
- @TS2
- LH=1:LJ=1:LL=0
- @TSH
- LL=LL-1:IF LL>0 THEN RETURN
- LL=12:P=LI(LI):J=11
- @TS3
- IF GD(J)==0 THEN @TS4
- J=J+1:IF J<35 THEN @TS3
- RETURN
- @TS4
- GD(J)=1:GK(J)=0
- GB(J)=P:GL(J)=1:GH(J)=1
- IF P<12 OR P>14 THEN @TS7
- GL(J)=-1
- @TS7
- IF VX<128 THEN GH(J)=-1
- GOSUB @TICHI
- SPCHR J,BT(P),BP(P),0,0,1
- SPANIM J,BA(P),5,0
- SPOFS J,GX(J)-8,GY(J)-8
- IF P<15 THEN @TS8
- LK=600-LI:SPSCALE J,200
- BGMPLAY 2
- LB=1:LT=LI/2+20:GOTO @TS6
- @TS8
- SPSCALE J,100
- LJ=LJ+1:IF LJ<9 THEN RETURN
- @TS6
- LI=LI+1:LH=0
- IF LI<48 THEN RETURN
- LI=1:RO=RO+1:RETURN
- @TMOVE
- O=11
- @TMS
- IF GD(O)==0 THEN @TM0
- IF GD(O)==2 THEN @TM2
- IF GD(O)>2 THEN @TM3
- GK(O)=GK(O)+2
- IF GK(O)<360 THEN @TM9
- IF GB(O)<15 THEN @TM1
- GK(O)=0
- @TM9
- P=BI(GB(O)):J=O:GOSUB @TICHI
- SPOFS O,GX(O)-8,GY(O)-8:U=1
- @TM8
- IF TD(U)!=1 THEN @TM7
- IF GX(O)>TX(U)+8 THEN @TM7
- IF GX(O)<TX(U)-8 THEN @TM7
- IF GY(O)>TY(U)+8 THEN @TM7
- IF GY(O)<TY(U)-8 THEN @TM7
- IF GB(O)>14 THEN @TM6
- GD(O)=2
- @TM4
- TD(U)=0:SPOFS U+80,0,-32
- @TM7
- U=U+1:IF U<13 THEN @TM8
- IF GX(O)>VX+8 THEN @TM0
- IF GX(O)<VX-8 THEN @TM0
- IF GY(O)>VY+8 THEN @TM0
- IF GY(O)<VY-8 THEN @TM0
- VD=1
- @TM0
- O=O+1:IF O<35 THEN @TMS
- RETURN
- @TM1
- GD(O)=0:SPOFS O,0,-32
- GOTO @TM0
- @TM2
- BEEP 12:SC=SC+1:GOSUB @DRAWSC
- PJ=PJ+1:SPCHR O,248,3,0,0,0
- SPANIM O,8,5,1:GD(O)=3
- GOTO @TM0
- @TM3
- GD(O)=GD(O)+1
- IF GD(O)<12 THEN @TM0
- GOTO @TM1
- @TICHI
- IF P>15 THEN @TI3
- IF P>9 THEN @TI2
- @TI1
- Z=P*0.5:K=GK(J):C1=Z*K
- C=C1-FLOOR(C1/360)*360
- S=SIN(RAD(K)):C2=COS(RAD(C))
- GX(J)=-S*C2*120*GH(J)+128
- GY(J)=-COS(RAD(K))*C2*88+96
- RETURN
- @TI2
- Z=0.5:IF P>11 THEN Z=1.5
- IF P>13 THEN Z=2.5
- K=GK(J):C1=Z*K
- C=C1-FLOOR(C1/360)*360
- C2=COS(RAD(C)):S=COS(RAD(K))
- GX(J)=-C2*120*GH(J)+128
- GY(J)=-S*88*GL(J)+96
- RETURN
- @TI3
- Z=1.5:IF P==17 THEN Z=2
- IF P==18 THEN Z=3
- K=GK(J):C1=Z*K
- C=C1-FLOOR(C1/360)*360
- S=SIN(RAD(C))
- GX(J)=S*80*GH(J)+128
- GY(J)=(K/180-1)*88+96
- RETURN
- @KEYIN
- TR=BUTTON()
- IF TR AND 4 THEN VX=VX-8
- IF TR AND 8 THEN VX=VX+8
- IF TR AND 1 THEN VY=VY-8
- IF TR AND 2 THEN VY=VY+8
- TH=0:IF TR AND 16 THEN TH=1
- IF VX<8 THEN VX=8
- IF VX>248 THEN VX=248
- IF VY<16 THEN VY=16
- IF VY>184 THEN VY=184
- IF TR AND 1024 THEN @KEY1
- RETURN
- @KEY1
- TR=BUTTON()
- IF TR!=0 THEN @KEY1
- @KEY2
- TR=BUTTON()
- IF TR!=1024 THEN @KEY2
- VSYNC 10:RETURN
- @JIMOVE
- SPOFS 0,VX+8,VY-8:RETURN
- @MSTART
- IF TK>0 THEN TK=TK-1:RETURN
- IF TH!=1 THEN RETURN
- J=1:TK=4
- @MS2
- K=1
- @MS0
- IF TD(K)==0 THEN @MS1
- K=K+1:IF K<13 THEN @MS0
- RETURN
- @MS1
- TD(K)=1:TY(K)=VY
- IF VP>0 THEN @MS3
- TX(K)=VX:TW(K)=0:RETURN
- @MS3
- IF J>1 THEN @MS4
- TX(K)=VX-4:TW(K)=0:GOTO @MS8
- @MS4
- IF J>2 THEN @MS6
- TX(K)=VX+4:TW(K)=0:GOTO @MS8
- @MS6
- IF J>3 THEN @MS7
- TX(K)=VX:TW(K)=-8:GOTO @MS8
- @MS7
- TX(K)=VX:TW(K)=8:RETURN
- @MS8
- J=J+1
- IF J>2 AND VP==1 THEN RETURN
- GOTO @MS2
- @MMOVE
- FOR K=1 TO 12
- IF TD(K)!=1 THEN @MM0
- TX(K)=TX(K)+TW(K)
- TY(K)=TY(K)-12
- SPOFS K+80,TX(K)-7,TY(K)-8
- IF TY(K)<0 THEN @MM3
- J=11
- @MM1
- IF GD(J)!=1 THEN @MM2
- IF TX(K)>GX(J)+16 THEN @MM7
- IF TX(K)<GX(J)-16 THEN @MM7
- IF TY(K)>GY(J)+16 THEN @MM7
- IF TY(K)<GY(J)-16 THEN @MM7
- IF GB(J)>14 THEN @MMB
- @MM7
- IF TX(K)>GX(J)+8 THEN @MM2
- IF TX(K)<GX(J)-8 THEN @MM2
- IF TY(K)>GY(J)+8 THEN @MM2
- IF TY(K)<GY(J)-8 THEN @MM2
- GD(J)=2
- @MM4
- TD(K)=0:SPOFS K+80,0,-32
- @MM2
- J=J+1:IF J<35 THEN @MM1
- @MM0
- NEXT:RETURN
- @MM3
- TD(K)=0:SPOFS K+80,0,-32
- GOTO @MM0
- @MMB
- B=GB(J):LT=LT-1
- IF LT!=4 THEN @MM8
- SPCHR J,BT(B),BY(B),0,0,1
- SPANIM J,BA(B),5,0
- @MM8
- BEEP 11:IF LT>0 THEN @MM4
- SC=SC+LI*15:BEEP 13:LK=50
- GD(J)=2:BGMPLAY 13:GOTO @MM4
- @TM6
- B=GB(O):LT=LT-1
- IF LT!=4 THEN @TM61
- SPCHR O,BT(B),BY(B),0,0,1
- SPANIM O,BA(B),5,0
- @TM61
- BEEP 11:IF LT>0 THEN @TM4
- SC=SC+LI*15:BEEP 13:LK=50
- GD(O)=2:BGMPLAY 13:GOTO @TM4
- @ESTART
- EK=EK+1
- IF EK<(28-RO*8) THEN RETURN
- J=(LI+4)/10+RND(5)+RO
- IF J<6 THEN RETURN
- K=1:EK=0
- @ES1
- IF ED(K)==0 THEN @ES2
- K=K+1:IF K<21 THEN @ES1
- RETURN
- @ES2
- J=0:I=RND(24)+11
- @ES3
- IF GD(I)==1 THEN @ES5
- J=J+1:I=I+1
- IF J>24 THEN RETURN
- IF I>34 THEN I=11
- GOTO @ES3
- @ES5
- ED(K)=1:EX(K)=GX(I)
- EY(K)=GY(I)
- J=(LI+4)/20+RND(5)-4+RO
- IF J<1 THEN J=1
- ES(K)=J:M=VX-EX(K):N=VY-EY(K)
- A=SQR(M*M+N*N)
- IF A==0 THEN A=1
- EM(K)=M*2*J/A:EN(K)=N*2*J/A
- RETURN
- @EMOVE
- FOR K=1 TO 20
- IF ED(K)!=1 THEN @EM8
- EX(K)=EX(K)+EM(K)
- EY(K)=EY(K)+EN(K)
- SPOFS K+50,EX(K)-8,EY(K)-8
- IF EX(K)>VX+6 THEN @EM1
- IF EX(K)<VX-6 THEN @EM1
- IF EY(K)>VY+6 THEN @EM1
- IF EY(K)<VY-6 THEN @EM1
- VD=1
- @EM1
- IF EX(K)<0 THEN @EM2
- IF EX(K)>256 THEN @EM2
- IF EY(K)<0 THEN @EM2
- IF EY(K)>192 THEN @EM2
- @EM8
- NEXT:RETURN
- @EM2
- ED(K)=0:SPOFS K+50,0,-32
- GOTO @EM8
- @PSTART
- IF PD>0 THEN RETURN
- IF PJ<20 THEN RETURN
- PJ=0:PK=0
- IF VP<2 THEN @PS1
- SPCHR 80,234,3,0,0,0
- SPANIM 80,2,5,0:PD=2:RETURN
- @PS1
- PD=1:SPCHR 80,232,13,0,0,0
- SPANIM 80,2,5,0:RETURN
- @PMOVE
- IF PD==0 THEN RETURN
- IF PD>2 THEN @PM6
- Z=2.5:PK=PK+3:C1=Z*PK
- C=C1-FLOOR(C1/360)*360
- PX=-SIN(RAD(C))*40+128
- PY=(PK/180-1)*88+96
- SPOFS 80,PX,PY
- IF PK>=366 THEN @PM5
- IF PX>VX+12 THEN RETURN
- IF PX<VX-12 THEN RETURN
- IF PY>VY+12 THEN RETURN
- IF PY<VY-12 THEN RETURN
- @PM3
- IF PD==1 THEN @PM4
- SC=SC+PH:GOSUB @DRAWSC
- COLOR 9:LOCATE PX/8-1,PY/8
- ?PH;”0”;:BEEP 7:PH=PH*2
- IF PH>6400 THEN PH=6400
- SPOFS 80,0,-32:PK=0:PD=3
- RETURN
- @PM4
- VP=VP+1:BEEP 36
- PD=0:SPOFS 80,0,-32:RETURN
- @PM5
- PD=0:PH=100:SPOFS 80,0,-32
- RETURN
- @PM6
- PK=PK+1:IF PK<50 THEN RETURN
- LOCATE PX/8-1,PY/8:?” ”;
- PD=0:RETURN
- @DIE
- IF VP==0 THEN @DI0
- VP=VP-1:BEEP 11:VD=0:PH=100
- GOTO @MAIN
- @DI0
- BEEP 13:SPCHR 0,248
- SPANIM 0,8,10,0:KJ=0
- @DI1
- GOSUB @TMOVE
- GOSUB @EMOVE
- GOSUB @MMOVE
- GOSUB @PMOVE
- GOSUB @SCROLL
- VSYNC 2
- KJ=KJ+1:IF KJ<70 THEN @DI1
- VL=VL-1:IF VL>=0 THEN @START2
- COLOR 13:LOCATE 11,9
- ?”GAME OVER”:BGMPLAY 24
- IF SC>HI THEN HI=SC
- COLOR 13:LOCATE 10,17
- ?”HIT A BUTTON”:SPOFS 0,0,-32
- @DI3
- B=BUTTON():IF B!=0 THEN @DI3
- @DI2
- B=BUTTON()
- IF B AND 16 THEN @START1
- IF B AND 1024 THEN @DI4
- GOSUB @TSTART
- GOSUB @TMOVE
- GOSUB @EMOVE
- GOSUB @SCROLL
- IF LI(LI)>14 THEN LI=LI+1
- VSYNC 1:GOTO @DI2
- @DI4
- BGMSTOP:END
- @SCROLL
- BGOFS 0,VX/2,BGL1:BGL1=BGL1-8
- BGOFS 1,VX/8,BGL2:BGL2=BGL2-2
- IF BGL1<0 THEN BGL1=504
- IF BGL2<0 THEN BGL2=510
- RETURN
- @DRAWSC
- A$=STR$(SC):R=LEN(A$)
- A$=” ”+A$
- B$=MID$(A$,R-1,6):COLOR 0
- LOCATE 5,0: ?B$;”0”;
- IF UP!=0 THEN RETURN
- IF SC<1000 THEN RETURN
- VL=VL+1:UP=1:GOSUB @DRAWVL
- RETURN
- @DRAWHI
- A$=STR$(HI):R=LEN(A$)
- A$=” ”+A$
- B$=MID$(A$,R-1,6):COLOR 0
- LOCATE 25,0: ?B$;”0”;:RETURN
- @DRAWVL
- COLOR 7:LOCATE 0,23:?” ”;
- LOCATE 0,23
- IF VL<1 THEN RETURN
- FOR ZW=1 TO VL:?”Г”;:NEXT
- RETURN
- @CYARA
- DIM BT(21),BA(21),BP(21)
- DIM BI(21),BY(21),LI(48)
- RESTORE @CY1:FOR K=1 TO 20
- READ BT(K),BA(K),BP(K),BI(K)
- NEXT
- FOR K=15 TO 20:READ BY(K)
- NEXT
- @CY1
- DATA 140,2,5,18,140,2,4,17
- DATA 140,2,2,16,174,2,5,1
- DATA 174,2,12,3,174,2,0,5
- DATA 137,1,4,7,137,1,5,9
- DATA 178,3,2,10,178,3,3,12
- DATA 178,3,10,14,180,3,2,11
- DATA 180,3,3,13,180,3,10,15
- DATA 174,2,10,6,163,1,10,4
- DATA 178,3,7,6,174,2,8,4
- DATA 178,3,2,8,137,1,3,8
- DATA 11,3,3,11,5,12
- FOR K=1 TO 47:READ LI(K)
- NEXT:RETURN
- DATA 1,2,5,4,10,15
- DATA 1,3,6,4,9,12,11,16
- DATA 2,3,5,6,11,1,13,17
- DATA 3,4,14,9,10,12,7,18
- DATA 1,6,13,11,5,12,8,19
- DATA 9,10,11,14,13,12,8,20,2
- @BGCL
- FOR K=0 TO 63
- FOR J=0 TO 63
- BGPUT 0,J,K,0,0,0,0
- BGPUT 1,J,K,0,0,0,0:NEXT
- NEXT:RETURN
- @BGSTAR
- FOR K=0 TO 80:X=RND(48)
- Y=RND(64):C=RND(14)+2
- J=859+RND(2)*32
- BGPUT 1,X,Y,J,C,0,0:NEXT
- FOR K=0 TO 2
- FOR J=0 TO 15:RESTORE @BGP3D
- FOR Y=0 TO 2
- FOR O=0 TO 1
- FOR X=0 TO 2:READ I
- L=X+O*37+K*4
- BGPUT 0,L,Y+J*4,I+768,10,0,0
- NEXT
- NEXT
- NEXT
- NEXT
- NEXT:RETURN
- @BGP3D
- DATA 108,45,110,44,45,46
- DATA 0,76,77,76,77,0
- DATA 44,109,46,108,109,110