★この記事は「IchigoJam Advent Calendar 2024」に参加しています。
https://qiita.com/advent-calendar/2024/ichigojam
先日公開した横スクロールシューティングゲームを改造。
プログラム2本に分割して、通常ステージとボスステージを設けてグラディウス風に。懐かしいな~。
紹介動画はこちら。
遊び方
- 右側から飛んでくる敵を避けつつ、ビームで撃ってください。当たると点数が1点入ります。
- 自機の操作は、カーソルキーの上下左右で移動、スペースキーでビーム発射です。
- 敵を10体倒すとボスステージへ移行します。ボスの中心核へビームを10発当ててください。ボスを倒すと通常ステージへ戻ります。
- 自機が敵や敵の弾に当たるとゲームオーバーとなり、プログラムが終了します。
プログラム
プログラムは2分割です。どちらも1Kバイトぎりぎり。
0番と1番など、連続したSAVEファイル2個に置いて、ファイル0から実行してください。
IchigoJam Sでは遅いのでお勧めしません(^_^;)
ファイル0:通常ステージ
1 CLV:Z=FILE():Y=12 2 [0]=0:COPY#801,#800,203:M=0:CLS:?S 3 GSB9:FORE=15TO31STEP4:FORB=0TO6STEP3:IF[B]GSB13 4 NEXT:WAIT1:B=(E-15)/8*3:IF![B]&&BTN(32)GSB12 5 IF[E]GSB16 ELSEIFRND(20)=1GSB15 6 NEXT:COPY#BE0,#BE1,30:LC30,23:?CHR$(RND(4)+140);:IFS%20=10LRUNZ+1 7 IF!MGOTO3 8 BEEP30,30:LCX,Y:?"*";:LC11,11:?"GAME OVER":CLK:END 9 U=X-BTN(28)*(X>0)+BTN(29)*(X<30):V=Y-BTN(30)*(Y>1)+BTN(31)*(Y<22) 10 LCX,Y:?" ":X=U:Y=V:IFSCR(X,Y)>139M=1:RTN 11 LCX,Y:?CHR$(243):RTN 12 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-":RTN 13 C=[B+1]:D=[B+2]:LCC,D:?" ":C=C+1:[B+1]=C:IFC>30[B]=0:RTN 14 LCC,D:?"-":J=B:FORI=15TO31STEP4:GSB20:NEXT:RTN 15 [E]=1:[E+1]=30:[E+2]=RND(22)+1:[E+3]=RND(2)*2-1:LC[E+1],[E+2]:?CHR$(237):RTN 16 F=[E+1]:G=[E+2]:LCF,G:?" ":F=F-1:IFF<0[E]=0:RTN 17 G=G+[E+3]:IFG<1ORG>22[E+3]=-[E+3]:CONT 18 [E+1]=F:[E+2]=G:IFX=F&&Y=GM=1:RTN 19 LCF,G:?CHR$(237):I=E:FORJ=0TO6STEP3:GSB20:NEXT:RTN 20 K=0:IF[I]&&[J]&&[I+1]=[J+1]&&[I+2]=[J+2]K=I:L=J 21 IF!KRTNELSE[K]=0:[L]=0:BEEP:S=S+1:LC0:?S:LC[K+1],[K+2]:?" ":RTN
ファイル1:ボスステージ
1 CLS:?S:[0]=0:COPY#801,#800,203:P=28:T=0:W=9 2 GSB8:FORE=15TO31STEP4:FORB=0TO6STEP3:IF[B]GSB13 3 NEXT:WAIT1:B=(E-15)/8*3:IF![B]&&BTN(32)GSB12 4 IF[E]GSB17ELSEIFRND(20)=1GSB16 5 GSB20:NEXT:IFM=-1BEEP10,30:WAIT60:LRUNZ,2 6 IF!MGOTO2 7 BEEP30,30:LCX,Y:?"*";:LC11,11:?"GAME OVER":CLK:END 8 U=X-BTN(28)*(X>0)+BTN(29)*(X<30):V=Y-BTN(30)*(Y>1)+BTN(31)*(Y<22) 9 H=SCR(X,Y):IFH=61||(H>127&&H!=243)M=1:RTN 10 H=SCR(U,V):IFH=61||(H>127&&H!=243)M=1:RTN 11 LCX,Y:?" ":LCU,V:?CHR$(243):X=U:Y=V:RTN 12 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-":RTN 13 C=[B+1]:D=[B+2]:LCC,D:?" ":C=C+1:H=SCR(C,D):IFH=255GSB22 14 [B+1]=C:IFC>30||H>32[B]=0:RTN 15 LCC,D:?"-":RTN 16 [E]=1:[E+1]=28:[E+2]=Q+1:LC[E+1],[E+2]:?"=":RTN 17 F=[E+1]:G=[E+2]:LCF,G:?" ":F=F-1:IFF<0[E]=0:RTN 18 [E+1]=F:IFX=F&&Y=GM=1:RTN 19 LCF,G:?"=":RTN 20 FORR=0TO2:LCP,Q+R:?" ":NEXT:T=T+2:Q=10+SIN(T)/24 21 LCP,Q:?CHR$(140,140,159):LCP,Q+1:?CHR$(0,255);W:LCP,Q+2:?CHR$(131,131,157):RTN 22 BEEP:[B]=0:S=S+1:LC0:?S:W=W-1:IFW<0M=-1 23 RTN
プログラム2分割ですが、データを引き継いでいるだけでほぼ別のゲームです。
かつてのグラディウスのプログラムもこんな作り方だったのかな…?