SHIROのIchigoJam日記

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

IchigoJam RPiでさめがめ風ゲーム「いちがめ」

※この記事は「IchigoJam Advent Calendar 2018」「Raspberry Pi Advent Calendar 2018」にエントリーしています。

以前にIchigoJamで作った、さめがめ風ゲーム「いちがめ」。
www.ichigojaman.jp
同じ種類のコマを選んで消していくのですが、さすがに処理が重くて「何とか我慢して遊べる」感じでした。
ふと、「IchigoJam RPi(ラズパイ版)で動かしたら速いんじゃ?」と思い立って、試してみました。
IchigoJam RPiは、先日公開された最新板(1.2.6)をダウンロードして使いました。
IchigoJam BASIC RPi1.2 ダウンロード

f:id:shiro0922:20181206220252j:plain

ラズパイ版では嘘のようにコマをサクサク消せて、すごく快適に遊べます。あまりに速くてビックリしました。
ラズパイをお持ちの方は、ぜひ遊んでみてください。

遊び方

  • 起動すると、16×16=256個の駒が表示されます。最初のステージ0は駒が3種類です。
  • 反転しているカーソルをカーソルキーで移動して、同じ駒が縦・横に2個以上つながっている所で、スペースキーを押してください。その駒が消えて、駒が下へ詰まります。縦1列全ての駒が消えた場合は、右側の列が左へ詰まります。
  • (消した駒数-2)の2乗がスコアに加算されます。駒2個だと消しても0点、駒数が増えると点数が上昇します。
  • 残り駒数が駒種類数×2以下(最初は6個以下)になると、そのステージはクリアです。次のステージでは駒が1種類増えます。ステージ6(駒9種類)をクリアすると、駒は3種類に戻ります。

プログラムリスト

再掲します。以下の2つのプログラムを連続したスロットに配置して、コマ設定プログラムから起動してください。なお2回目以降のプレイでは、メインプログラムを直接RUNして構いません。

(1)コマ設定プログラム

1 '*1Game V2 Koma* (PCG)
2 CLP
3 '
4 'Koma PCG Pattern
5 LET [ 8],#04,#3E,#2F,#56,#6A,#D6,#AC,#F0
6 LET [16],#38,#7C,#FE,#FE,#FE,#7C,#38,#00
7 LET [24],#38,#44,#82,#82,#82,#44,#38,#00
8 LET [32],#38,#44,#92,#BA,#92,#44,#38,#00
9 LET [40],#38,#74,#F2,#F2,#F2,#74,#38,#00
10 LET [48],#38,#44,#82,#FE,#82,#44,#38,#00
11 LET [56],#38,#44,#A2,#92,#8A,#44,#38,#00
12 LET [64],#38,#44,#8A,#94,#A2,#44,#38,#00
13 LET [72],#38,#44,#82,#82,#FE,#7C,#38,#00
14 '
15 'Normal Koma(#E1-#E9)
16 FOR C=1 TO 9:FOR B=0 TO 7
17 POKE (#E0+C)*8+B,[C*8+B]
18 NEXT:NEXT
19 '
20 'Reverse Koma(#F1-#F9)
21 FOR C=1 TO 9:FOR B=0 TO 7
22 POKE (#F0+C)*8+B,PEEK((#E0+C)*8+B)^#FF
23 NEXT:NEXT
24 '
25 LRUN FILE()+1

(2)メインプログラム

1 '1Game V2
2 CLV:LET[91],-1,0,1,0,0,-1,0,1,0,0:J=15
3 CLS:L=256:W=J:M=S%7+3:FORY=0TOJ:FORX=0TOJ:?CHR$(#E1+RND(M));:NEXT:?:NEXT:GSB9:GSB10
4 K=INKEY()*2-60:IFABS(K)>4GOTO4
5 IFK=4GSB13:IFL<M*2BEEP9,30:WAIT60:S=S+1:GOTO3
6 GSB11:X=P+[K+95]:Y=Q+[K+96]:IFSCR(X,Y)P=X:Q=Y
7 GSB11:IF!GGOTO4
8 LC0,19:END
9 LC0,18:?"Stage ";S;"  Score ";T:RTN
10 P=0:Q=J
11 X=P:Y=Q
12 I=SCR(X,Y):I=I+((I<#F0)-(I>#EF))*16:LCX,Y:?CHR$(I):RTN
13 U=P:V=Q:N=SCR(U,V)-16:C=0:[C]=U+V*16:H=1:GSB23:IF!CRTN
14 BEEP:B=0
15 B=B+1:U=[B]&15:V=[B]/16:GSB23:IFB<CGOTO15
16 I=C-1:T=T+I*I:L=L-I-2:GSB9:FORB=0TOC:X=[B]&15:FORY=JTO0STEP-1:IF#F0>SCR(X,Y)ELSEFORZ=YTO0STEP-1:POKE#900+X+Z*32,SCR(X,Z-1):NEXT:Y=Y+1
17 NEXT:NEXT:IF!LRTN
18 FORX=WTO0STEP-1:IFSCR(X,J)ELSEFORY=JTO0STEP-1:LCX,Y:FORZ=XTOW:?CHR$(SCR(Z+1,Y));:NEXT:NEXT:W=W-1
19 NEXT:C=0:H=0:FORU=0TOW:FORV=JTO0STEP-1:N=SCR(U,V):IF!NGOTO21
20 GSB23:IFCU=W:V=0
21 NEXT:NEXT:IF!CG=1
22 GSB10:RTN
23 FORD=91TO97STEP2:X=U+[D]:Y=V+[D+1]:IFSCR(X,Y)=NC=C+1:[C]=X+Y*16:IFHGSB12
24 NEXT:RTN