Bボタンを押してゲームスタート!真っ赤に光る的を狙って撃ちます(Aボタン押下)。命中すると1ポイントゲットです。三角に光っている的に当てると-5ポイントです。30秒で何ポイント取れるかな?
5回撃つと弾がなくなります。銃を振って弾を装填しましょう。ゲームが終了したら、銃にポイントが表示されます。
銃1丁あたり
的1個あたり
赤外線LEDモジュールを初めて使う人は、まずチュートリアルをチェックしましょう。
※初めて micro:bit で遊ぶ場合は、micro:bit チュートリアル「初めてのプログラミング」にチャレンジしてみてください。
赤外線受信モジュールを初めて使う人は、まずチュートリアルをチェックしましょう。
スチレンボードやダンボールなどクラフト素材を使って、銃の形を作りましょう。
ワークショップモジュールにmicro:bitと赤外線LEDモジュールを接続し、ワークショップモジュールは銃のグリップ部分に、LEDモジュールは銃口部分に設置してください。
銃の側面は、左図の寸法で作りました。参考にしてください。
micro:bitに赤外線受信モジュールと電池ボックスを接続します。
左の設計図を参考に厚紙を切りぬき、青色点線は谷折りにします。設計図PDFはこちら
両面テープマーク部分を貼り合わせると、左図のようになります。
モジュール類をマスキングテープなどで固定したら、完成です。
ペンなどで模様を描いて、いろいろなデザインの的を作りましょう。
銃と的の動作テスト。銃のmicro:bit ボタンAを押したら発光!的のセンサーが赤外線を受信したら「ピコーン」と音が鳴って、的のmicro:bit LEDが点灯します。
銃のプログラム
※赤外線LEDのスイッチは「NORMAL」にしてください。スイッチについては、チュートリアルをチェックしてください。
プログラムURL:https://makecode.microbit.org/_0Hf1ULKpWb48
※こちら画面のプログラムをMakeCodeで開く方法はチュートリアルを確認してください。
的のプログラム
プログラムURL:https://makecode.microbit.org/_UCk42mX821FE
銃のmicro:bit ボタンBを押したらゲームスタート!的が光ったら、銃口を向けてボタンAを押しましょう!
銃から出た赤外線が的のセンサーにキャッチされたら1点ゲット。ゲーム時間は30秒。ゲーム終了したら、銃のmicro:bitに点数が表示されます。
銃のプログラム
プログラムURL:https://makecode.microbit.org/_Cj2RJbV16DY3
説明
2つの変数を新しく作ります。「変数」を初めて使う人は、チュートリアルをチェックしてください。
① 初期設定を行っています。
② micro:bitのLED画面に得点を表示します。
③ ボタンAが押されたとき、ゲーム中なら、赤外線を0.05秒間(50ミリ秒)出します。
④ ボタンBが押されたら、変数「得点」を「0」にして変数「ゲーム中」を「真」にし、ゲーム開始の合図としてメロディを流します。30秒(30000ミリ秒)経過したら、変数「ゲーム中」を「偽」にし、ゲーム終了の合図としてメロディを鳴らします。
⑤ 的から数値を受信したら、変数「得点」に受信した数値を加算します。
的のプログラム
プログラムURL:https://makecode.microbit.org/_REk4qTXwvTss
説明
変数「光っている」を新規作成し、的が光っているかどうかを管理します(的が光っているときに赤外線を受信した場合にだけ「的に当たった」と判定したいため)。的が光っているときを「真」、光っていないときを「偽」と設定します。
① 初期設定を行っています。
② 的の点滅を行っています。変数「光っている」を「真」にしアイコンを表示。点灯時間をランダム(500~1500までの乱数)にすることでドキドキ感を演出します。変数「光っている」を「偽」にしたあと表示を消します。消灯時間もランダム(1000~3000までの乱数)にしています。
③ 赤外線を受信したかどうか調べています。受信して、かつ、変数「有効」が「真」だったら(=的が光っていたら)、得点として「1」を銃に送信。メロディとアイコンで的に当たったことを表現します。
銃に装填機能を追加します。ステップ1までは、弾は無限にありましたが(=ゲーム中であれば何回でも撃てましたが)、弾数を5個に制限します。
弾数は 銃のmicro:bitに表示されます。弾が切れて「0」になったら、銃を振って装填しましょう。※ゲーム終了したら、micro:bit には得点が表示されます。
銃のプログラム
プログラムURL:https://makecode.microbit.org/_1VxHA1HKM665
説明
変数「弾数」を新規作成して、弾の数を管理します。
① 変数「弾数」の初期設定をしています。
② 変数「弾数」が0より大きい(残りの弾数が1個以上ある)場合に赤外線を照射するよう、条件をステップ1から追加しています。「弾数」が0以下の場合は、弾切れの合図としてメロディを鳴らしています。
③ 変数「弾数」を「5」に設定するブロックを追加しています。
④ 弾を装填するプログラムです。ゲーム中に micro:bitをゆさぶったら、変数「弾数」を「5」に設定し、合図としてメロディを流します。
⑤ ゲーム中かどうかで、micro:bit LED画面の表示を切りかえています。ゲーム中の場合は残りの弾数を表示して、ゲーム中ではないときは直前に行われたゲームの得点を表示します。
的のプログラムは、ステップ1と同じです。
プログラムURL:https://makecode.microbit.org/_REk4qTXwvTss
的にダミー機能を追加します。ハートマークが表示されている時に撃てたら1点ゲット!△マーク(ダミー)が表示されているときに撃ったら5点減点!(得点がマイナスにはならないようにします)
銃のプログラム(画像は、ステップ2から変更している部分のみ)
プログラムURL:https://makecode.microbit.org/_Pm91wj0YH4fU
説明
変数「得点」がマイナスに(0より小さく)なった場合は「0」に設定する機能を追加しています。
的のプログラム
プログラムURL:https://makecode.microbit.org/_C7bRfXArwURF
説明
変数「的の状態」を追加して、的のアイコンが「消灯」「ホンモノ点灯(当てたら得点ゲット)」「ダミー点灯(当てたら減点)」のどの状態にあるかを管理します。値が「0」とのき「消灯」、「1」のとき「ホンモノ」、「2」のとき「ダミー」に設定します。
① 的の点滅を行っています。「ホンモノ/ダミー」→「消灯」→「ホンモノ/ダミー」→「消灯」→… と、点灯と消灯は交互に行います。点灯するときにホンモノにするかダミーにするかは、ランダムで決めています。
② 赤外線を受信したかどうか調べています。赤外線を受信したときに変数「的の状態」が「1」だったら(ホンモノだったら)得点として「1」を送信。変数「的の状態」が「2」だったら(ダミーだったら)得点として「-5」を送信しています。
得点板を新しく用意します。今までは銃のmicro:bitに得点を表示していましたが、得点板に表示します。銃のmicro:bitには、ゲーム中のみ弾数が表示されます。ゲーム中ではないときは何も表示されません。
得点板用に、micro:bit 1台と電池ボックス 1個を追加で用意しましょう。
銃のプログラム(画像は、ステップ3から変更している部分のみ)
プログラムURL:https://makecode.microbit.org/_5i5EWfHAmE1d
説明
銃のmicro:bitでは得点を管理しなくなるため、変数「得点」に関するブロックはすべて削除します。
① ゲームスタート時に得点ボードの点数を「0」にしたいため、ボタンBが押されたことを通知するために文字列"start"を送信します。※送信するデータは何でもOKです。
② ゲーム中ではないときは表示を消します。
的のプログラムは、ステップ3と同じです。
プログラムURL:https://makecode.microbit.org/_C7bRfXArwURF
得点板のプログラム
プログラムURL:https://makecode.microbit.org/_R6EPk0W7uCTU
ステップ3のルールで、2人以上同時にプレーして点数を競えるモードです。銃は、同時にプレーする人数分、用意しましょう。
銃のプログラム(画像は、ステップ3から変更している部分のみ)
プログラムURL:https://makecode.microbit.org/_8DzaTEcd6fps
説明
① 自分の「固有の名前」を無線送信します。※的のmicro:bitは、赤外線を受信したとき、受信した「固有の名前」(文字列)と数値(得点)を送信します。
② 受信した文字列データ(変数「name」に保存)が自分の「固有の名前」と同じであれば、受信した数値データ(変数「value」に保存)を変数「得点」に加算します。
的のプログラム(画像は、ステップ3から変更している部分のみ)
プログラムURL:https://makecode.microbit.org/_HHA2f83h3Ks5
説明
ステップ3では「ずっと」ブロックの中に赤外線を受信したときのプログラムを作っていましたが、今回は「無線で受信したとき」ブロックの中で作ります。
① 受信した文字列(変数「receivedString」に保存)と数値データ(得点)のセットを送信します。