★IchigoJam Advent Calendar 2021にエントリーしています。
IchigoJam Advent Calendar 2021に掲載されたスロットマシンのプログラムが面白かったので、私もスロットマシンを作ってみました。
プログラムを実行すると、4個のスロットがぐるぐる回ります。
スペースキーを押すと、左側のスロットから順に停止します。4回押すと全て停止します。
停止状態でスペースキーを押すとリプレイします。
スロットのキャラクターは16種類あります。
それぞれ1~16点になっていて、4個のスロットの合計点が左上に表示されます。最高点はイチゴマーク×4個で64点です。
が、なかなか思った通りのキャラで止められないので、半分おみくじ気分で回してみてください。
同じキャラを4個揃えようとしても、なかなか難しいです。
プログラム
IchigoJam Sでも十分遊べますが、IchigoJam Rだと高速に回って楽しいです。IchigoJam webでは遅すぎてちょっと…(^_^;)
1 '*SLOT MACHINE 2 CLV:VIDEO 0 3 CLP:COPY #790,#798,8:COPY #798,#720,48:COPY #7D0,#758,40 4 P=#700:FOR A=#780 TO #7FE STEP 2 5 B=PEEK(A):C=PEEK(A+1):M=128 6 FOR I=0 TO 3 7 [0]=((B&M)>0):[2]=((C&M)>0):M=M>>1 8 [1]=((B&M)>0):[3]=((C&M)>0):M=M>>1 9 F=128+[0]+[1]<<1+[2]<<2+[3]<<3 10 POKE P,F:P=P+1 11 NEXT:NEXT 12 @RES 13 VIDEO 3:CLS:CLK:P=#700:Z=0:S=0 14 FOR X=0 TO 3 15 [X]=RND(64)<<2:[X+4]=0 16 NEXT 17 @LOOP 18 FOR X=0 TO 3 19 GSB @ROT 20 IF INKEY()=32 [Z+4]=1:Z=Z+1 21 NEXT 22 IF [7]!=2 GOTO @LOOP 23 IF INKEY()!=32 CONT 24 GOTO @RES 25 @ROT 26 IF [X+4]=2 RTN 27 Q=P+[X]:W=X<<2 28 FOR Y=0 TO 3 29 A=Q+Y<<2:IF #7FF<A A=A-256 30 LC W,Y+4 31 FOR B=0 TO 3 32 D=PEEK(A+B):?CHR$(D); 33 NEXT 34 NEXT 35 IF [X+4]=1 && [X]%16=0 GSB @STP 36 [X]=[X]+4:[X]=[X]&255 37 RTN 38 @STP 39 BEEP:[X+4]=2:S=S+[X]/16+1:LC 0:?S:RTN
- 3行目で必要なキャラクターをPCG領域(文字コード240~255)にCOPYして並べた後、4~11行目でキャラのフォントデータを読み出して、横4×縦4のグラフィック文字(文字コード128~143)に変換。PCG領域全体(#700~#7FF)に、横4×縦4×16キャラの変換データが配置されます。スロット回転表示の高速化のために、最初に表示データを用意しています。
- 25~37行目が回転スロットを表示するサブルーチンです。4つのスロットのメモリポインタ[0]~[3]のアドレスから始まる横4×縦4=16文字分のキャラを、画面に表示しています。
- 各スロットの回転状態は配列変数[4]~[7]の値で管理していて、0=回転中、1=スペースキーが押された後にキャラ全体を表示するまで回転中、2=停止です。ちゃんとキャラ全体を表示するまで回してから止めないといけないので、ちょっと複雑な処理をしています。