mBlockを使ってArduinoを動かしてみた16:コードブレーカー完成して遊んでみた(小学生こう君のブログ )

こんにちは!こう君です。
今回はいよいよ最終回です。今回は、がんばって作ったコードブレーカーで遊びます。

ゲームのルールはここです。

mBlockを使ってArduinoを動かしてみた10:コードブレーカーゲームのルール

第10回から第15回までで解説したプログラムを、お父さんがつなげてくれました。
父 注:記事末尾で解説します。)

では、早速遊んでいきます。 弟と一緒に遊びました。

弟といっしょに、Arduinoとゲーム対決しました

スプライト(パンダ)をクリックすると、3つのスイッチで数字の入力ができます。

最初に、1234と入れてみました。するとついたLEDは緑が1つ、赤が2つでした。

1234と入れたら、赤2、緑1でした

2回目、3回目と入力をしました。しかし、ずっと赤2つだけと、緑1つ赤2つが交互になって、なかなか当たりません。色々試した結果、ちょうど8回目で正解できました。

ちょうど8回目で正解しました。Rは赤、Gは緑です。

正解した時、音もLEDも、しっかり動きました!

これで、Arduinoを使ったブログは終了です。

これからは、たまに他の内容の番外編を投稿したいです。

ここからは、お父さんにプログラムの解説をしてもらいます。

父の解説:プログラムの統合

すでに前回の記事までで要素要素のプログラムは作っていたので、こう君自身にプログラムを合体していってもらおうと思っていたのですが、mBlockのエディタだと大きなプログラムの編集が難しく、さらに以下に書く通り、思った通りに動かない問題があって、結局、父がプログラム統合を行いました。

mBlockの制約によって一部プログラムを書き直しました。

Arduino側のプログラム

第14回に書いた、サーボモータが「ブロードキャスト」を介してだとスプライト側から駆動できなかった問題に続いて、今回プログラムを統合するとブロードキャストを介して動くスクリプトと動かないスプリトがあり、困りました。

結局、「mBlockのブロードキャストを介してArduino側で動かせるメッセージは10個まで」という制約があることを見出しました。これがバグなのか、仕様なのかはわかりませんが、とにかく使用したバージョン(v5.2.0)にはそういう制約があるようです。

そこで、Arduino側で受け取るメッセージが10個になるようにプログラムを組みなおしました。

具体的には、

第13回の「syokika」を、「switch-wait」の中に統合

して数を減らしました。

スプライト側のプログラム

Arduino側のメッセージを増やせないことがわかったので、スプライト側のプログラムを少し冗長にして対応しました。具体的には、3通りの場合

(i) n-red≠0 ∩ n-green≠0 
(ii) n-red≠0 ∩ n-green=0
(iii) n-red=0 ∩ n-green=0

のそれぞれで、n+1回目の入力へ進む部分(「千の位はいくつ?」)を作りました(9回目だと失敗の状態へ遷移する)。もう少し美しく書きたかったですが、何とか動いて良かったです!

スプライト側プログラム:暗号の生成と、1回目の千の位の入力
スプライト側プログラム:スイッチを押すと、数字を増減する
スプライト側プログラム:千の位以外の位の回答の入力と、結果の判定。その後、n-redの数に応じてLED点灯コマンドを送る。
スプライト側プログラム:n-greenの数に応じてLED点灯コマンド送る
スプライト側プログラム:赤も緑も入力終わり、次の入力を千の位から開始
左:父が書いた状態遷移図、右:こう君が書いたArduino UNO+ブレッドボード回路図

バックナンバー:

mBlockを使ってArduinoを動かしてみた1:セットアップ(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた2:LEDライト点滅(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた3:LEDで信号機(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた4:スイッチ取り付け(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた5:早押しボタン(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた6:音を出す(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた7:モータを回す(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた8:パソコン画面のキャラクターと連動(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた9:液晶ディスプレイ(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた10:コードブレーカーゲームのルール(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた11:コードブレーカーの暗号を作る(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた12:コードブレーカーの暗号判定(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた13:コードブレーカー判定結果の出力(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた14:コードブレーカー正解/失敗時の動作(小学生こう君のブログ )

mBlockを使ってArduinoを動かしてみた15:コードブレーカー答えの入力(小学生こう君のブログ )

--

--

Hiraku Sakamoto
東京工業大学エンジニアリングデザインプロジェクト

Associate Professor; Engineering Sciences and Design (ESD) Graduate Major, Department of Mechanical Engineering, Tokyo Institute of Technology, Japan.