フルカラーLEDスカッシュゲーム

フルカラーLEDのWS2812Bを10個使い、LED1個をボールに見立てたスカッシュゲームです。
今回は、IchigoJam Rを使ってプログラムしました。
一番手前のLEDが光った時に、IchigoJamのタクトスイッチ(SW2)を押して打ち返します。
空振りなどで打ち損じたときはゲームオーバーです。

フルカラーLEDの使い方は、テキスト「LEDでナナイロづくり」も参考にしてください。

動画のマイコンは、IchigoJam&ESPJUICEとオプションの10連フルカラーLEDを装着したものです

‘simpleSQUASH

30 CLV:W=20:Q=10
100 @MAIN
110 [ABS(P)*3]=0
130 P=P+1
140 [ABS(P)*3]=50
150 WS.LED Q
160 IF P==Q-1 BEEP30:P=1-Q
170 IF P!=0 WAIT W:GOTO@MAIN
180 IF BTN() GOTO@GAMEOVER
210 CLT
220 @HIT
230 IF BTN() BEEP5:GOTO@MAIN
240 IF TICK()<W GOTO@HIT
250 @GAMEOVER
260 BEEP 100,120



30行目 CLV:W=20:Q=10
 使用する変数の初期化をします。
 ▪️変数の説明▪️を参照してください

100行目 @MAIN
 ボールを打って帰ってくるまでを繰り返す、メイン処理です。
110行目 [ABS(P)*3]=0
 現在のボール位置※2を、消灯に設定します。
130行目 P=P+1
 ボールの位置を移動※2させます。
140行目 [ABS(P)*3]=50
 新しいボールの位置※2を、緑色(輝度50)に設定します。
150行目 WS.LED Q
 フルカラーLEDを、配列に設定した値で点灯させます。
 この行を実行する毎に、ボールが動いて見えます。
160行目 IF P==Q-1 BEEP30:P=1-Q
 ボールが端(壁)に到達したら、方向を反転※2させます。
 今回のスカッシュプログラムでは、変数Pが9のときに、-9に書き換えます。
 BEEP30で音を鳴らして、ボールが壁から跳ね返った効果を出します。
170行目 IF P!=0 WAIT W:GOTO@MAIN
 ボールが一番手前の打球位置でなければ(変数Pが0でなければ)、@MAIN処理に戻りボール移動※2を続けます。
 ボールが打球位置にあるならば(変数Pが0ならば)、次の行に進みます。

180行目 IF BTN() GOTO@GAMEOVER
 不正対策の処理です。
 タクトスイッチを押し続けていれば、ここで@ゲームオーバー処理に行きます。
210行目 CLT
220行目 @HIT
230行目 IF BTN() BEEP5:GOTO@MAIN
240行目 IF TICK()<W GOTO@HIT
 打球判定処理※3をおこないます。
 制限時間内に、IchigoJamのタクトスイッチが押されれば打ち返し成功となり、
 高いBEEP音を鳴らして、@MAIN処理に戻ってゲームを続けます。
 打ち損じたときは、次の行に進みます。

250行目 @GAMEOVER
260行目 BEEP 100,120

 ゲームオーバーの処理を行います。
 BEEP音を低く長く鳴らして、ゲームオーバーの効果を出します。
 プログラムはここで終了し、コマンドプロンプトになります。


※2 ボール移動は変数Pの正負を利用して動かします。
   Pの値は、1,2,3,4,5,6,7,8,9,-8,-7,-6,-5,-4,-3,-2,-1,0 のように変化していき、
   値が正数ならボールが壁に近づく動きとなり、負数なら壁から離れる動きをします。
   ABS(P)はPの絶対値を返すので、この値をそのまま配列で使うことができきます。
   ボールの動き(LEDの位置)と変数Pの値の変化は、次のプログラムを追加して、
   1ステップずつ実行してみるとよくわかります。
    145 PRINT P:INPUT Z

※3 220〜240行目の打球判定処理は、1行にまとめることもできます。
   220 ifBtn()beep5:goto@MAIN:elseIfTick()<Wcont



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