射的ゲーム(赤外線センサー)

Bボタンを押してゲームスタート!真っ赤に光る的を狙って撃ちます(Aボタン押下)。命中すると1ポイントゲットです。三角に光っている的に当てると-5ポイントです。30秒で何ポイント取れるかな?
5回撃つと弾がなくなります。銃を振って弾を装填しましょう。ゲームが終了したら、銃にポイントが表示されます。

このゲームは赤外線を使ったゲームになるため、環境によっては期待通りにゲームを行えない場合があります。 例えば、同じ部屋でTVのリモコン操作を行うなど、赤外線が使われている部屋では、銃で撃ってないのに的が反応する可能性があります。



使っている機能

  • LED
  • ボタン
  • スピーカー
  • 入出力ピン(赤外線LEDと赤外線センサーに利用)


用意するもの

銃1丁あたり

ワークショップモジュール

赤外線LEDモジュール

的1個あたり

赤外線受信モジュール

電池ボックス

赤外線LEDモジュール(コネクタータイプ)


赤外線LEDモジュールを初めて使う人は、まずチュートリアルをチェックしましょう。

チュートリアル

※初めて micro:bit で遊ぶ場合は、micro:bit チュートリアル「初めてのプログラミング」にチャレンジしてみてください。




赤外線受信モジュール


赤外線受信モジュールを初めて使う人は、まずチュートリアルをチェックしましょう。

チュートリアル





組立:銃


スチレンボードやダンボールなどクラフト素材を使って、銃の形を作りましょう。
ワークショップモジュールにmicro:bitと赤外線LEDモジュールを接続し、ワークショップモジュールは銃のグリップ部分に、LEDモジュールは銃口部分に設置してください。


銃の側面は、左図の寸法で作りました。参考にしてください。




組立:的


micro:bitに赤外線受信モジュールと電池ボックスを接続します。





左の設計図を参考に厚紙を切りぬき、青色点線は谷折りにします。設計図PDFはこちら



 ポイント

黒丸部分は赤外線受光用の穴になります。穴を大きくすると、ねらった的だけでなく隣の的まで受光してしまう場合があるので、穴の大きさには注意しましょう。
ニードルなど先端がとがったものを使って穴をあけましょう。



両面テープマーク部分を貼り合わせると、左図のようになります。





モジュール類をマスキングテープなどで固定したら、完成です。



ペンなどで模様を描いて、いろいろなデザインの的を作りましょう。


プログラム:ステップ0

銃と的の動作テスト。銃のmicro:bit ボタンAを押したら発光!的のセンサーが赤外線を受信したら「ピコーン」と音が鳴って、的のmicro:bit LEDが点灯します。

銃のプログラム
※赤外線LEDのスイッチは「NORMAL」にしてください。スイッチについては、チュートリアルをチェックしてください。

プログラムURL:https://makecode.microbit.org/_0Hf1ULKpWb48
※こちら画面のプログラムをMakeCodeで開く方法はチュートリアルを確認してください。

的のプログラム

プログラムURL:https://makecode.microbit.org/_UCk42mX821FE

 ポイント:論理



赤外線を受信したかどうか調べるために「論理」の中にある「条件判断」ブロックを使いました。「条件判断」ブロックを初めて使う場合はチュートリアルをチェックしましょう。
チュートリアル


 期待通りに動かなかったら、以下を確認しましょう

  • 電池ボックスやワークショップモジュールの電源スイッチがONになっていますか?
  • 銃の赤外線LEDモジュールのスイッチが「NORMAL」になっていますか?
  • 銃のプログラムで指定している「端子」は、赤外線LEDモジュールを接続している micro:bitの端子番号になっていますか?
  • 的のプログラムで指定している「端子」は「P1」になっていますか?
  • 電池は、新品もしくは新品に近い電池を使っていますか?
    古い電池を使っている場合、正しくプログラムが動かない可能性があります
  • 銃のボタンを押した直後、赤外線LEDモジュールについている赤色LEDが点灯していますか?
    点灯していない場合、赤外線LEDモジュールが故障している可能性があります
  • 赤外線受信モジュールのチュートリアルで紹介しているプログラムを動かしたとき、期待通りに動きますか?
    期待通りに動かない場合、赤外線受信モジュールが故障している可能性があります




プログラム:ステップ1

銃のmicro:bit ボタンBを押したらゲームスタート!的が光ったら、銃口を向けてボタンAを押しましょう!
銃から出た赤外線が的のセンサーにキャッチされたら1点ゲット。ゲーム時間は30秒。ゲーム終了したら、銃のmicro:bitに点数が表示されます。

 無線通信
的は、赤外線を受信したら数値(得点)を銃に送信します。銃は、受け取った数値を得点として加算します。数値(得点)のやりとりは無線通信で行います。
無線通信が初めての人はチュートリアルをチェックしてください。 チュートリアル


銃のプログラム

プログラムURL:https://makecode.microbit.org/_Cj2RJbV16DY3

説明
2つの変数を新しく作ります。「変数」を初めて使う人は、チュートリアルをチェックしてください。

  • ゲーム中:ゲーム中かどうかを管理します。ゲーム中の場合(ボタンBを押してから30秒間)は値を「真」に、ゲーム中ではないときは値を「偽」に設定します。「真偽」については、チュートリアル条件判断ページの一番下あたりをチェックしてください。
  • 得点:ゲームの得点を管理します。

① 初期設定を行っています。
② micro:bitのLED画面に得点を表示します。
③ ボタンAが押されたとき、ゲーム中なら、赤外線を0.05秒間(50ミリ秒)出します。
④ ボタンBが押されたら、変数「得点」を「0」にして変数「ゲーム中」を「真」にし、ゲーム開始の合図としてメロディを流します。30秒(30000ミリ秒)経過したら、変数「ゲーム中」を「偽」にし、ゲーム終了の合図としてメロディを鳴らします。
⑤ 的から数値を受信したら、変数「得点」に受信した数値を加算します。

的のプログラム

プログラムURL:https://makecode.microbit.org/_REk4qTXwvTss

説明
変数「光っている」を新規作成し、的が光っているかどうかを管理します(的が光っているときに赤外線を受信した場合にだけ「的に当たった」と判定したいため)。的が光っているときを「真」、光っていないときを「偽」と設定します。

① 初期設定を行っています。
② 的の点滅を行っています。変数「光っている」を「真」にしアイコンを表示。点灯時間をランダム(500~1500までの乱数)にすることでドキドキ感を演出します。変数「光っている」を「偽」にしたあと表示を消します。消灯時間もランダム(1000~3000までの乱数)にしています。
③ 赤外線を受信したかどうか調べています。受信して、かつ、変数「有効」が「真」だったら(=的が光っていたら)、得点として「1」を銃に送信。メロディとアイコンで的に当たったことを表現します。

 的の設置間隔

的同士が近すぎると、ねらった的だけでなく隣の的まで赤外線を受信してしまう可能性があります。実際にプレイしながら、間隔を調整しましょう。


アレンジしよう!

的の点灯時間を変更してゲームの難易度を調整したり、得点をランダムにしてワクワク感をアップさせてみたり、オリジナルのルールを作って遊びましょう。


プログラム:ステップ2

銃に装填機能を追加します。ステップ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

プログラム:ステップ3

的にダミー機能を追加します。ハートマークが表示されている時に撃てたら1点ゲット!△マーク(ダミー)が表示されているときに撃ったら5点減点!(得点がマイナスにはならないようにします)

銃のプログラム(画像は、ステップ2から変更している部分のみ)

プログラムURL:https://makecode.microbit.org/_Pm91wj0YH4fU

説明
変数「得点」がマイナスに(0より小さく)なった場合は「0」に設定する機能を追加しています。

的のプログラム

プログラムURL:https://makecode.microbit.org/_C7bRfXArwURF

説明
変数「的の状態」を追加して、的のアイコンが「消灯」「ホンモノ点灯(当てたら得点ゲット)」「ダミー点灯(当てたら減点)」のどの状態にあるかを管理します。値が「0」とのき「消灯」、「1」のとき「ホンモノ」、「2」のとき「ダミー」に設定します。

① 的の点滅を行っています。「ホンモノ/ダミー」→「消灯」→「ホンモノ/ダミー」→「消灯」→… と、点灯と消灯は交互に行います。点灯するときにホンモノにするかダミーにするかは、ランダムで決めています。
② 赤外線を受信したかどうか調べています。赤外線を受信したときに変数「的の状態」が「1」だったら(ホンモノだったら)得点として「1」を送信。変数「的の状態」が「2」だったら(ダミーだったら)得点として「-5」を送信しています。


プログラム:ステップ4

得点板を新しく用意します。今までは銃の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

 LEDボードで得点を大きく表示

得点板のmicro:bitにLEDボード(数字型)を接続して、得点を大きく表示することも可能です。商品ページはこちら



対戦モード

ステップ3のルールで、2人以上同時にプレーして点数を競えるモードです。銃は、同時にプレーする人数分、用意しましょう。

 ポイント:固有の名前

ツールボックス「高度なブロック」>「制御」>「その他」に「固有の名前」というブロックがあります。これは、micro:bitの固有の名前(文字列)が保存されている変数です。 すべてのmicro:bitには、それぞれ異なる名前がついています。
対戦モードでは、的のmicro:bitから数値(得点)を受信したとき、その得点が自分の得点なのかどうか判断できるように、銃のmicro:bitの「固有の名前」を使っています。


銃のプログラム(画像は、ステップ3から変更している部分のみ)

プログラムURL:https://makecode.microbit.org/_8DzaTEcd6fps

説明
① 自分の「固有の名前」を無線送信します。※的のmicro:bitは、赤外線を受信したとき、受信した「固有の名前」(文字列)と数値(得点)を送信します。
② 受信した文字列データ(変数「name」に保存)が自分の「固有の名前」と同じであれば、受信した数値データ(変数「value」に保存)を変数「得点」に加算します。

的のプログラム(画像は、ステップ3から変更している部分のみ)

プログラムURL:https://makecode.microbit.org/_HHA2f83h3Ks5

説明
ステップ3では「ずっと」ブロックの中に赤外線を受信したときのプログラムを作っていましたが、今回は「無線で受信したとき」ブロックの中で作ります。

① 受信した文字列(変数「receivedString」に保存)と数値データ(得点)のセットを送信します。


関連作例

射的ゲーム(振動センサー)Lv.1
当てたら的がピカっと光ります!