SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

IchigoJam RPiでシューティングゲーム

IchigoJam Advent Calendar 2017へエントリーしました。

Raspberry Piで動く「IchigoJam RPi」は、計算速度がかなり速いことがわかりました。
そのスピードを活かしたプログラムとして、横シューティングゲームを作ってみました。

と言っても、実はIchigoJam上でかなり前に作ったゲームです。作ってみたものの、あまりに速度が遅かったのでお蔵入りしていました。ラズパイ版でリベンジです。
動かしてみた動画はこちら。

ラズパイ版だと結構なスピードで動きます。これならゲームとして十分遊べます。
プログラムはこちら。

1 '*H Shooting
2 CLV:CLS:?"SCORE 0":X=0:Y=12
3 FORE=14TO22STEP4:GSB8:FORB=3TO9STEP3:IF[B]GSB12
4 NEXT:B=(E-10)/4*3:IF![B]&&BTN(SPACE)GSB11
5 IF[E]GSB15 ELSEIF!RND(30)GSB14
6 WAIT2:NEXT:IF!MGOTO3
7 BEEP30,30:LCX,Y:?"*";:LC7,12:?"GAME OVER":END
8 U=X-BTN(LEFT)*(X>0)+BTN(RIGHT)*(X<30):V=Y-BTN(UP)*(Y>1)+BTN(DOWN)*(Y<22)
9 LCX,Y:?CHR$(0);:X=U:Y=V:IFSCR(X,Y)=237M=1:RTN
10 LCX,Y:?CHR$(243);:RTN
11 [B]=1:[B+1]=X+1:[B+2]=Y:LC[B+1],[B+2]:?"-";:RTN
12 C=[B+1]:D=[B+2]:LCC,D:?CHR$(0);:C=C+1:[B+1]=C:IFC>30[B]=0:RTN
13 LCC,D:?"-";:GSB19:RTN
14 [E]=1:[E+1]=30:[E+2]=RND(22)+1:[E+3]=RND(2)*2-1:LC[E+1],[E+2]:?CHR$(237);:RTN
15 F=[E+1]:G=[E+2]:LCF,G:?CHR$(0);:F=F-1:IFF<0[E]=0:RTN
16 G=G+[E+3]:IFG<1ORG>22[E+3]=-[E+3]:CONT
17 [E+1]=F:[E+2]=G:IFX=F&&Y=GM=1:RTN
18 LCF,G:?CHR$(237);:GSB19:RTN
19 K=0:FORI=14TO22STEP4:FORJ=3TO9STEP3:IF[I]&&[J]&&[I+1]=[J+1]&&[I+2]=[J+2]K=I:L=J
20 NEXT:NEXT:IF!KRTN
21 [K]=0:[L]=0:LC[K+1],[K+2]:?"*";:BEEP:S=S+1:LC6,0:?S:LC[K+1],[K+2]:?CHR$(0);:RTN

動作速度はクリアできましたが、あとはコード容量がネックですね。
本当は敵のミサイルなどを出したいのですが、今のプログラムでほぼ1KB目一杯です。
ラズパイならメモリに余裕があるでしょうし、4K拡張BASIC版が出ることを期待します(^_^)

追記

IchigoJam RPiの新しいファームウェア(1.2.b15)が公開されました。
https://www.facebook.com/groups/ichigojam/1051283401678079/
カーソルが点滅するようになり、画面表示速度が劇的に改善されました。
ライフゲームでは、全ライフが一瞬で描画されるようになりました。
シューティングゲームでは、敵の数が増えても動作速度が落ちなくなりました。