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

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

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

このスカッシュゲームを元に作成した、「フルカラーLEDルーレット」もあります。


‘simpleSQUASH フルカラーLEDスカッシュ

30 CLV:W=20:Q=10
100 @MAIN
110 [ABS(P)*3]=0
130 P=P+1

140 IF P==Q P=2-Q:BEEP30
150 [ABS(P)*3]=50
160 WS.LED Q
180 IF P!=0 WAIT W:GOTO@MAIN
190 IF BTN()==1 GOTO@GAMEOVER
210 CLT
220 @HIT
230 IF BTN()==1 BEEP5:GOTO@MAIN
240 IF TICK()<W GOTO@HIT
250 @GAMEOVER
260 BEEP100,120



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

100行目 @MAIN
 ボールを打って、壁から戻ってくるまでを繰り返す、メイン処理です。
110行目 [ABS(P)*3]=0
 前のボール位置※2を、消灯に設定します。
130行目 P=P+1
 ボール位置を移動※2します。
140 IF P==Q P=2-Q:BEEP30
 ボール位置が端(壁)を越えたら、方向を反転※2します。
 今回のスカッシュプログラムでは、変数Pが+10のときに、-8に書き換えます。
 BEEP30で音を鳴らして、壁から跳ね返った効果を出します。
150行目 [ABS(P)*3]=50
 新しいボール位置※2に、緑色(輝度50)を設定します。
160行目 WS.LED Q
 フルカラーLEDを、配列に設定した値で点灯します。
 この行を実行すると、フルカラーLEDを点灯する毎にボールが動いて見えます。
180行目 IF P!=0 WAIT W:GOTO@MAIN
 ボール位置が一番手前の打球位置でなければ(変数Pが0以外ならば)、
 @MAIN処理に戻りボール移動※2を続けます。
 ボール位置が打球位置にあるならば(変数Pが0ならば)、次の行の処理に進みます。
190行目 IF BTN()==1 GOTO@GAMEOVER
 不正対策の処理です。
 ボールが打球位置に来る前からタクトスイッチを押し続けていれば、
 空振りにして、@GAMEOVER 処理に行きます。
210行目 CLT
220行目 @HIT
230行目 IF BTN()==1※3 BEEP 5:GOTO@MAIN
240行目 IF TICK()<W GOTO@HIT
 打球判定の処理※3を行います。
 240行目の制限時間内(ボールスピード時間)に、230行目でタクトスイッチが押されれば、
 打ち返し成功となり、高い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 のように変化していき、
   値が正数ならボールが壁に近づく動きとなり、負数なら壁から帰ってくる動きとなります。
   Pの値を配列の添え字にするときは、ABS(P)のように絶対値で使用します。

   次のプログラムを追加して実行すると、ボールの動きとPの値の変化がわかります。
    155 PRINT P
   下図も参考にしてください。

※3 220〜240行目の打球判定処理は、1行にまとめることができます。
   220 IF BTN() BEEP5:GOTO@MAIN:ELSE IF TICK()<W CONT

   BTN命令は、ボタンが押されていると1、押されていなければ0を返します。
   IchigoJam BASIC では、条件式の結果が0以外は真、0は偽として扱われます。
   他のIchigoJam説明では「1か0」と書かれている場合がありますが、実際には、-1でも1000も真となります。
   IF BTN() THEN a ELSE b は、
    IF BTN()==1 THEN a ELSE b  または、
    IF BTN()!=0 THEN a ELSE b  と同じ結果を実行します。
    いずれも、ボタンが押されていれば a、押されていなければ b、を実行します。

   CONT命令は、中断した行を再実行するものですが、実際には同じ行を繰り返します。
   220 ….. IF TICK()<W CONT は、
   220 ….. IF TICK()<W FOTO220 と同じ結果になります。



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