8×8 傾き迷路ゲーム ― 「つぎのマスの色」で進むしくみを作ろう

総合・探究

いつもの8×8 LEDパネルで、本体を傾けて遊ぶ迷路ゲームを作ります。座標(x, y)でプレイヤーをかき、ジャイロの角度で動かし、「つぎのマスの色」を見てかべ・ゴールを判定するまでを、ステップごとにしくみから解説。自分で組んでも、配布プログラムをコピーして改造してもOK。かべでゲームオーバーになるチャレンジ版つき。

中学校~ 中級 90

ここでやること

今回のゴールは、本体を傾けて遊ぶ「8×8 傾き迷路ゲーム」。赤いプレイヤーを傾きで動かして、青いかべをよけながら黄色いゴールを目指します。使うのは、いつもの 8×8 LEDパネルと、本体に入っているジャイロセンサー、それに圧電スピーカーだけ。
このページでは「遊ぶ・改造する」だけでなく、ゲームがどういうしくみで動いているかを、ステップごとに組み立てながら理解していきます。
  • 座標(x, y)でプレイヤーの場所をあらわす
  • ジャイロの角度を「もし〜なら」で判定して動かす
  • つぎのマスの色を見て、かべ・ゴールを判定する(このゲームの一番のひみつ)
進め方:自分でブロックを組んでもよいし、各ステップの「◯◯を開く」からプログラムをコピーして、動かしながら読んでもOKです。
全体の流れ(約90分)
ステップ内容目安
準備プロジェクトを作り、LEDパネルとスピーカーをつなぐ10分
ステップ1迷路とプレイヤーをかく ― 座標 x, y10分
ステップ2かたむきで動かす ― ジャイロと「もし」20分
ステップ3かべとゴールを判定する ― つぎのマスの色20分
ステップ4完成プログラムで遊ぶ・しくみを読む10分
ステップ5改造する(迷路・速さ・音)15分
チャレンジかべでゲームオーバー・迷路3種ランダム5分〜

準備しよう

プログラミング画面を開こう。
「新しいプロジェクトを追加する」をクリックすると、プロジェクト作成ウインドウが出るので、「作成」をクリックしてプログラミング画面を開きます。
SPACEBLOCKをパソコンにつなげよう。
プログラミング画面を開くとデバイス接続ウインドウが表示されるので、SPACEBLOCKとパソコンをUSBケーブルでつなげます。つなげたら「USBで接続する」をクリック。新しくウインドウが表示されるので「SPACEBLOCK」をクリックしてから「接続」を押します。
※2回目からは自動でSPACEBLOCKがパソコンとつながります。
8×8 LEDパネルをつなげよう。
USBケーブルの隣にある横向きピンソケットに、LEDパネルが立つように写真のようにつなげます。
※LEDパネルをつなげた後に本体を持つときは、パネルではなく本体を持ちましょう。
圧電スピーカーをつなげよう。
圧電スピーカーには赤と黒の2本のワイヤがあります。青色ピンソケット(USBコネクタの右下にある青い2列のソケット)の外側の列に、黒いワイヤを左はしの GND、赤いワイヤをそのとなりの A0 にさします。
圧電スピーカーの配線
スピーカー側スペースブロック側(青色ピンソケット・外側の列)
黒いワイヤ左はし「GND」
赤いワイヤ左から2番目「A0」(音のブロックのピンは A0(T2))
本体やLEDパネルが手もとにないときは、シミュレータ画面でもためせます

ステップ1 迷路とプレイヤーをかこう ― 座標 x, y

迷路は「LED」カテゴリの「RGB LED [A10] を点灯」ブロックに絵としてかきます。色は、ブロックの上にならんでいるパレットの丸をクリックして選び、光らせたいマスをクリックします。色のルールはこの3つ。
  • 青(#0011CC)=かべ
  • 黄(#FFF100)=ゴール
  • 黒(消灯)=道
プレイヤーの場所は、2つの変数 x(よこ)y(たて)でおぼえます。左上が (1, 1)、右下が (8, 8)。x は右へいくほど、y は下へいくほど大きくなります。
かべとゴールは、かならずパレットの青と黄を使います。プログラムは、あとで色を #0011CC#FFF100 というカラーコード(色をあらわす文字)でくらべるからです。パレットの青=#0011CC、パレットの黄=#FFF100。右はしの「自由な色」で作った、にた青では、かべになりません。プレイヤーの赤もパレットの赤(#E60000)です。
迷路をかいたあと、x と y に 1 をセットして、「8×8 RGB LED の x (x) y (y) を 赤 に点灯」でプレイヤーを表示します。1マスだけ光らせるこのブロックが、プレイヤーの正体です。
QR code for project
❓ ステップ1のかくにん
x を 8、y を 1 にすると、プレイヤーはどこに出る? ゴールの黄色のマスは (x, y) = いくつ?

ステップ2 かたむきで動かそう ― ジャイロと「もし」

SPACEBLOCKに入っているジャイロセンサーは、本体が水平からどれくらい傾いているかを角度で教えてくれます。水平のとき 0、傾けるほど −90〜90 の数字に変わります。ジャイロは本体の中に入っているので、傾けるのは本体です。
⚠ 持ち方 ― かならず本体を持とう
  • LEDパネルではなく、本体(基板)のはしを両手で持つ。パネルを持って傾けると、線がぬけたり、こわれたりします
  • LEDパネルの光る面を自分に向ける。このとき、本体の2つのボタンが自分から一番遠いがわになります
  • LEDを見ながら、ボールを転がすつもりで前後左右にゆっくり傾けよう
かたむきと動き(このゲームの決まり)
読むもの条件動き
角度 Y(よこ)20 より大きい左へ(x − 1)
角度 Y(よこ)−20 より小さい右へ(x + 1)
角度 X(たて)25 より大きい上へ(y − 1)
角度 X(たて)−5 より小さい下へ(y + 1)
よこは ±20。たては上が 25、下が −5 と、わざとちがう数字にしています。LEDパネルは顔より下にあるので、上へ進む向きに傾けるとよく見え、下へ進む向きに傾けると見にくくなります。そこで、見にくい下はほんの少しの傾きで反応するように、見やすい上はしっかり傾けたときだけ反応するようにしてあります。
8×8 LEDパネルは本体の前がわの横向きピンソケットに立ててつなぐので、16×16の迷路ゲームとは上下左右の向きがすべて逆になっています。16×16版のプログラムを読むときは、ここがちがう点です。
ここで1つ工夫をします。いきなり x や y を変えるのではなく、「つぎに行きたい場所」を別の変数 nx・ny に入れておくのです(next の n)。
  1. まず nx に x、ny に y を入れる(今の場所をコピー)
  2. 4つの「もし」を上から順にならべる。「もし 角度 Y > 20 なら nx を x − 1」のように、向きごとに1つずつ。条件は傾きだけなので、読んだとおりに動きます
  3. 最後の2つの「もし」で、nx・ny が 1〜8 の外に出ていたら元に戻す(パネルの外には行けない)
4つの「もし」は「でなくもし」でつないでいないので、よことたての両方に傾けると、ななめにも進めます
ステップ2のプログラムでは、このあと「今のマスを消灯 → x に nx、y に ny をセット → 赤で点灯 → 150ミリ秒まつ」を「繰り返す」の中でくり返します。消灯を忘れると、通ったあとが全部赤くのこってしまいます。
QR code for project
❓ ステップ2のかくにん
よこの 20 を 5 に変えると、操作はどう変わる? 40 にすると? 本体をななめに傾けると、プレイヤーはどう動く?

ステップ3 かべとゴールを判定しよう ― つぎのマスの色

ステップ2のままだと、プレイヤーはかべをすりぬけてしまいます。そこで、進む前に「つぎのマス (nx, ny) の色」を調べます。「LED」カテゴリの「8×8 RGB LED の x ( ) y ( ) の色を取得」は、そのマスが今なに色で光っているかを #0011CC のような文字(カラーコード)で返してくれるブロックです。
つまり、迷路の絵そのものが「かべのデータ」になっています。かべの場所を別に表や配列でおぼえておく必要はありません。絵をかき変えれば、当たり判定もいっしょに変わります。
  • ① 動こうとしたときだけ判定:nx≠x または ny≠y のとき。傾けていないときは何もしません
  • ② 色をくらべる:取得した色を変数「色」に入れ、文字列の「=」でカラーコードとくらべます(「論理」カテゴリの文字列用の比較ブロック)
  • 青なら:低い音を鳴らすだけで、x・y は変えない = 進めない
  • 黄なら:変数「クリアしたか」を true にして「ループから抜け出す」
  • でなければ(道):消灯 → x・y を更新 → 点灯 → 移動の音
プレイヤーの赤は、x・y を更新したあとにぬるので、「つぎのマス」が自分の赤になることはありません。
❓ ステップ3のかくにん
迷路のかべを青ではなくでかいたら、どうなる?(ヒント:プログラムがくらべているのは #0011CC という文字)

ステップ4 完成プログラムで遊ぼう

⚡ 実行速度を「速い」にしよう
画面右上の「速度」ボタンを押して「速い」を選ぶと、LEDの反応がキビキビします。下の配布プロジェクトは、はじめから「速い」に設定してあります。
下の「8x8迷路ゲーム」を開いてコピーし、実行してみよう。ゴールするとクリア画面とファンファーレが流れて、また最初から遊べます。
QR code for project
ゲームのルール
意味どうなる
自分(プレイヤー)本体を傾けた方向に1マスずつ進む
かべ進めない(低い音が鳴る)
ゴールたどり着いたらクリア!
自由に進める
プログラム全体のながれはこうなっています。外がわの「繰り返す」がゲーム1回分、内がわの「繰り返す」が1マス分の動きです。ゴールすると内がわのループだけを抜けて、クリア画面へ進みます。

ステップ5 改造しよう

改造早見表
やりたいこと変える場所ヒント
迷路の形を変える「RGB LED を点灯」の絵かべ=青 #0011CC、ゴール=黄 #FFF100 の色はそのまま使う。スタート(1,1)からゴールまで道がつながっているか確認
速さを変える最初の「速度」小さくすると速い(むずかしい)。100〜250 がめやす
反応する傾きを変えるよこの ±20、上の 25、下の −50 に近いほど少しの傾きで動く。自分の持ちやすい感度にしよう
音を変える移動の音・かべの音・ファンファーレ鍵盤で音の高さ、数字で長さ
クリア画面を変える内がわのループの下の「RGB LED を点灯」好きな絵にかき変える
スタートの場所を変えるx と y の最初の数字かべの上には置かない
まずは迷路の絵をかき変えるのがおすすめ。下は参考の迷路3種です(チャレンジ版に入っています)。

チャレンジ ― かべでゲームオーバー

もっとスリルがほしい人はチャレンジ版へ。ちがいは3つです。
  • かべにぶつかるとゲームオーバー:青のとき、音を鳴らすかわりに「ループから抜け出す」。クリアしていないままループを抜けるので、あとの「もし クリアしたか なら/でなければ」でゲームオーバー画面に分かれます
  • 迷路が3種類からランダム:関数「迷路をかく」の中で、1〜3のランダムな数字で絵をえらびます
  • 関数で整理:「迷路をかく」「クリア」「ゲームオーバー」を関数にして、メインを短くしています
QR code for project
さらにアイデア:コイン(水色)を置いてスコアをつける時間制限をつける紫のマスでワープ……どれも「つぎのマスの色を見て分ける」を1つ増やすだけで作れます。16×16の大きなパネルで遊ぶ「傾き迷路ゲーム」のページには、その見本プログラムもあります。

まとめ

  • プレイヤーの場所は x と y の2つの数字。動かす=数字を ±1 すること
  • センサーの数字を読む → もし〜ならで判定する → LEDに出す、の3ステップ
  • 進む前に、つぎのマスの色を見る。絵がそのままデータになるので、迷路をかき変えるだけで新しいステージになる
  • 数字を1つ変えるだけで、むずかしさも手ざわりも変わる。それがプログラミングのおもしろさです