IchigoJam のスカッシュゲーム を改良して、ルーレットゲームにしました。
赤色の当たり位置を狙って、タクトスイッチを押してルーレットを止めます。
‘simple Roulette
30 CLV:W=5:Q=10
40 F=0:C=1:R=RND(Q)
100 @MAIN
110 LET[ABS(P)*3],0,0,0
120 LET[R*3],0,99,0
130 P=P+1
140 LET[ABS(P)*3],C&1*50,C>>1&1*50,C>>2&1*50
150 WS.LED Q:BEEP
160 IF P==Q-1 P=1-Q
170 WAIT W
180 IF BTN() F=1
190 IF F==1 W=W+5+RND(5)
200 IF W<60 GOTO@MAIN
■変数の説明■
W ボールスピード
Q フルカラーLEDの個数
P 現在のボール位置※2
[] WS.LED用の色配列
F 動作モード
0:回転モード
1:停止モード
C ボール色
1:緑、2:赤、3:黄、4:青、5:青緑、6:紫、7:白
R ルーレットの当たり位置
■プログラムの説明■
30行目40行目 変数の初期化です。
当たり位置は乱数で決めます。
100行目 @MAIN
ルーレットの往復を繰り返す、メイン処理です。
110行目 LET[ABS(P)*3],0,0,0
前のボール位置を消灯に設定します。
120行目 LET[R*3],0,99,0
ルーレットの当たり位置を、赤色(輝度99)に設定します。
130行目 P=P+1
ボール位置を移動させて、現在のボール位置にします。
140行目 LET[ABS(P)*3],C&1*50,C>>1&1*50,C>>2&1*50
新しいボール位置を、ボール色(輝度50)に設定します。
150行目 WS.LED Q:BEEP
フルカラーLEDを、配列に設定した値で点灯させ、
BEEP音を鳴らします。
160行目 IF P==Q-1 BEEP30:P=1-Q
ボール位置が端に到達したら、方向を反転させます。
170行目 WAIT W
ボール移動の待ち時間です。
180行目 IF BTN() F=1
タクトスイッチが押されたら、ルーレットの動作モードを停止モードに切り替えます
190行目 IF F==1 W=W+5+RND(5)
ルーレット停止モードであれば、ボール待ち時間を少しずつ増やします。
これで、ボールがだんだん遅くなっていく動きになります。
200 IF W<60 GOTO@MAIN
ボール待ち時間が60以下なら、@MAIN処理を繰り返します
60以上なら、プログラムを終了します。
■応用と改良■
1.円形状のフルカラーLEDを使う
160行目を次のように変更して、ボールが連続移動するようにします。
160 IF P==Q-1 LET[ABS(P)*3],0,0,0:P=-1
2.当たり判定をする
変数Pと変数Rを比較すれば、ルーレットの当たり位置でボールが止まったかどうかを判定することができます。
次のプログラムは、ゲームオーバー用の追加プログラム例です。
210 IF ABS(P)!=R GOTO@GAMEOVER
220 BEEP 7,180:LET[R*3],99,99,99
230 GOTO@END
240 @GAMEOVER
250 BEEP 100,120
260 @END
270 IF !BTN() WAIT30:WS.LED1,Q:WAIT30:WS.LEDQ:CONT
280 LET[0],50,50,50:WS.LED1,Q
290 IF BTN() CONT ELSE WAIT120:RUN

この教材は「Creative Commons — CC BY-SA 4.0」の下に提供されています。
