SHIROのIchigoJam日記

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

スロットマシン

IchigoJam Advent Calendar 2021にエントリーしています。

IchigoJam Advent Calendar 2021に掲載されたスロットマシンのプログラムが面白かったので、私もスロットマシンを作ってみました。
f:id:shiro0922:20211210023304p:plain
プログラムを実行すると、4個のスロットがぐるぐる回ります。
スペースキーを押すと、左側のスロットから順に停止します。4回押すと全て停止します。
f:id:shiro0922:20211210023400p:plain
停止状態でスペースキーを押すとリプレイします。

スロットのキャラクターは16種類あります。
f:id:shiro0922:20211210023441p:plain
それぞれ1~16点になっていて、4個のスロットの合計点が左上に表示されます。最高点はイチゴマーク×4個で64点です。
が、なかなか思った通りのキャラで止められないので、半分おみくじ気分で回してみてください。
f:id:shiro0922:20211210023643p:plain
同じキャラを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=停止です。ちゃんとキャラ全体を表示するまで回してから止めないといけないので、ちょっと複雑な処理をしています。