【CyberPi・mBlock】モーションセンサーで教育用マイコンをジョイコン化してディフェンスゲームに組み込む

CyberPiのジョイコン化 CyberPi・mBlock

個人的に micro:bitより 高校教育に適していると感じている教育用マイコン、makecode社 の CyberPi のモーションセンサーを用いたゲーム作成についてご紹介します!

マイコンのジョイコン化思ったより簡単にできちゃいます!!

今回は事前に作成している「マウスで操作するディフェンスゲーム」に「ジョイコン化した CyberPi をコントローラーとして組み込んで」いきます。

なお、事前に作成したディフェンスゲームのプログラムは、mBlock(プログラミング)入門編のものとなります(ソースコードはコチラから画面右下の「Source code」をクリック)。

また、ジョイコン化に必要となるモーションセンサーの制御については、モーションセンサー入門を事前に見ておくとスムーズに理解できます。

ゲーム内容:ディフェンスゲーム(ジョイコンバージョン)
  • 緑のフラッグをクリックすることでゲームスタート!
  • トングをジョイコン化したCyberPiで操作して、上から降ってくる敵役を撃退!画面下にいるヒロイン(アスリートの脚)?を守り切ろう!
  • ヒロインの初期HPは 3 です。0 になると GAME OVER となります。

そして、完成したプログラムはコチラ(ソースコードは画面右下の「Source code」をクリック)!

Scratch と同じ操作感で IoT に強みのある mBlock を用いて制御します。
プログラミングIoT初学者でもわかる入門(使い方)向けの内容でもあります。

 

モーションセンサーで教育用マイコンをジョイコン化してディフェンスゲームに組み込む

事前準備

CyberPiの接続

まず、CyberPiを、PC・mBlockと接続します。

CyberPiとPCの物理的な接続にはUSBケーブルを用いた有線接続と、Bluetoothドングルを用いた無線接続があります(Bluetoothドングルは別売り)。

物理的に接続できたら、今度はmBlock上でCyberPiを接続します。mBlockの画面左下の「接続」ボタンをクリックして接続します。

接続の詳しい方法については下記の記事で紹介しているので、参考にしてください。

ジョイコンを組み込むプログラムを開く

今回は、mBlock(プログラミング)入門編で作成したディフェンスゲームに、ジョイコン化した CyberPi を組み込みます。

コチラの画面右下の「Source code」に今回改変するディフェンスゲームのプログラムがありますので開いてください。

元のプロジェクトを別名で保存

改変するプログラムが開けたら、mBlock上で、プロジェクト(プログラム・ファイル)を「名前を付けて保存」して複製しましょう。他のプログラムを改変する前にも、必ずこの作業はやっておくようにしましょう(思いがけない上書き保存⇒データ損失を防ぐことができます)。プロジェクトの名称は任意のもので構いません。

ライブモード

今回のプログラムでは、モーションブロックの一つである「〇〇を制御してCyberPiを感度□□でフォローする」ブロックを用います。このブロックを使うと簡単にCyberPiをジョイコン化して、mBlock上のスプライト(キャラクターのようなもの)を操作することが可能となります。
(〇〇:スプライトを選択  □□:感度を低・中・高から選択)

〇〇を制御してCyberPiを感度□□でフォローするのブロック

「〇〇を制御してCyberPiを感度□□でフォローする」ブロックを用いたい場合、注意する点があります。それは、mBlock上の画面左下の「アップロードモード切り替え」を「オフ」にして、「ライブモード」にしておく必要があるということです。これをしない場合、「〇〇を制御してCyberPiを感度□□でフォローする」ブロックはグレーアウトしてしまい、機能しません。

ライブモードの状態
ライブモードの状態

CyberPiをジョイコン化して組み込む

操作するスプライトの用意

ジョイコン化した CyberPi で操作するスプライト(今回はマウスアイコンのようなイメージ)を用意します。

mBlock上の画面左下メニューの「スプライト」タブから「追加」ボタンをクリックし、ジョイコン化した CyberPi で操作したいスプライトを選択します。画像内では トング を選択しています。

また、操作するスプライトのサイズがデフォルトの100だと簡単過ぎるので、画像内では半分の50にしています。

スプライトTongを用意

CyberPiのジョイコン化(CyberPiのプログラム)

「〇〇を制御してCyberPiを感度□□でフォローする」ブロックを用いて CyberPi をジョイコン化します。

mBlock上の画面左下メニューの「デバイス」タブから CyberPi を選択し、モーションブロックから「〇〇を制御してCyberPiを感度□□でフォローする」ブロックを CyberPi のプログラムに配置します。〇〇には、ジョイコン化した CyberPi で操作するスプライト(トング)を選択し、□□には任意の感度を選択します。

スプライトと感度が選択できたら、「〇〇を制御してCyberPiを感度□□でフォローする」ブロックを制御ブロックの一つである「ずっと」ブロックで包みます。

さらには、イベントブロックの一つである「緑旗が押されたとき」ブロックを冒頭に配置することで、mBlock上のモニター画面右下の緑色の旗をクリックしたら、トング を ジョイコン化した CyberPi で操作できるようになります。

トング(ジョイコンで操作するスプライト)のプログラム

次に、ジョイコン化した CyberPi で操作するスプライト(トング)にプログラムを組んでいきます。

mBlock上の画面左下メニューの「スプライト」タブから トング を選択します。

そして、次の3つの組み合わせを作成します。

  • スタートしたときのブロックの組み合わせ
  • 負けてしまったときのブロックの組み合わせ
  • クリアしたときのブロックの組み合わせ
トングのプログラム

スタートしたときのブロックの組み合わせ

スタートのトリガーは、緑色の旗が押されたときにします。イベントブロックから「緑旗が押されたとき」ブロックを配置します。

次に、ゲームがスタートしたときの トング の初期位置を、真ん中にするようにプログラムします。動きブロックから「x座標と◯、y座標を△にする」ブロックを配置し、x座標とy座標をそれぞれ0にします。このとき、数値は必ず半角で入力するようにしてください(全角入力だと正常に動きません)。

最後に、見た目ブロックの「表示する」ブロックを配置して、スタート時に トング が表示されるようにします。

負けてしまったとき・クリアしたときのブロックの組み合わせ

このプログラムでは、HPが0になって負けてしまったときには、敵役のスプライトである ふぐ(Pufferfish)より「GAME OVER」というメッセージが全スプライトに送られ、クリアした際には「クリア」というメッセージが同様に送られます。

そして、そのメッセージをスプライトである Panda が受け取ると、Panda が画面上に表示されてコメントをくれるようなプログラムになっています(負けたら「GAME OVER…」、クリアしたら「Congratulations」)。その際、ジョイコンで操作するスプライトである トング が表示され続けるのは見た目が悪いので、各メッセージを受け取ったら トング を非表示にするようにします。

具体的には、イベントブロックから「〇〇を受け取ったとき」ブロックを2つ用いて、「GAME OVERを受け取ったとき」ブロックと「クリアを受け取ったとき」ブロックを配置します。さらには、各ブロックの下に見た目ブロックの「隠す」ブロックを配置します。

これでゲームが終了して Panda がコメントをする際に トング が非表示となり、見た目が良くなるプログラムとなりました。

ふぐ(敵)のプログラム

最後に、ふぐ(敵)のプログラムの当たり判定の部分を改変します。

改変前のプログラムでは、マウスで ふぐ(敵)をクリックしたら、効果音を鳴らして倒すことができるというものでした。今回は、トング(ジョイコン化したCyberPiで操作するスプライト)が ふぐ(敵役のスプライト)に触れたら、効果音を鳴らして倒すことができるプログラムにしていきます。

当たり判定の改変

改変前:マウスでクリック

改変後:ジョイコン化したCyberPiで操作するスプライトが触れる

まず、制御ブロックの「もし△△なら」ブロックを使って、当たり判定の部分を作っていきます。△△の条件の部分には、調べるブロックの「□□に触れた」ブロックの□□でトングを選択したものを配置します。つまり、「もし トングに触れた なら」ブロックを作ります。

そして、「もし トングに触れた なら」ブロック内には、当たった際の処理をプログラムします。具体的には、音ブロックの「〇〇の音を鳴らす」ブロックを配置し(音は任意のもので可)、その下に制御ブロックの「このクローンを削除する」ブロックを配置します。

完成した当たり判定のブロックの組み合わせは、「26回繰り返す」ブロック内に配置します。

ふぐ(敵)のプログラム

最後に、改変前の当たり判定の部分であるマウスでクリックして敵を倒すブロックの組み合わせ(「このスプライトが押されたとき」・「〇〇の音を鳴らす」「このクローンを削除する」)を削除しておきます。

これでジョイコン化したCyberPiをディフェンスゲームに組み込むことができました!

応用課題

ここまでサクッとできた人は、「スプライトが触れた」という当たり判定から「スプライトが触れたときにボタンが押されていた」という当たり判定に難易度を上げてみましょう。

さらに、「ボタンが押されていた」という当たり判定に「長押しは当たり判定から除外する」という機能も加えましょう。

ここまでやるとかなりゲームっぽくなってきませんか?ぜひチャレンジしてみてください。プログラミングはトライ&エラーでスキルが上がっていきますので!

 

コメント

タイトルとURLをコピーしました