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

こんにちは! こう君です。 今回は、前回に続いてコードブレーカーをmblockで作っていきたいと思います。

前回はここまで作りました。

今回は、暗号の判定のアルゴリズムを作りたいと思います。

まず、前回のプログラミングの下に画像のようにプログラミングをしてください。

これは、緑が何個かを判定するプログラムです。数字が合っていて、桁の場所も合っているときが緑になります。

緑を数えるプログラム

暗号の回答は1234に固定しておきました。後々入力できるようにしたいと思います。

緑の数を数えるのに、「n-green」という変数を使いました。

次に、赤のプログラムなんですが、プログラムをただ長くすれば簡単になったのですが、できるだけ短くしたいので、少し複雑になってしまいました。

なので、普段回路を図で書いているように、プログラムも図で書いてみました。フローチャートといって、プログラムを図で書くやり方です。

試しに、上の緑のプログラムをフローチャートにしてみました。

プログラムの意味は、まず変数「n-green」を0にします。 そして、変数「ichi」(ランダムに決められた数字の1の桁)が変数 「ichi-a」(解答の1の桁)と同じなら、変数「n-green」の値を1増やす、という意味です。

これを他の桁でも行って、千の桁まで終わったら、赤の判定に移るという意味です。

このフローチャートを使って、赤を数えるプログラムを作りましょう。数字の桁は間違っているけれど、数は合っている場合が赤色です。

画像のようにプログラミングしてください。新しく変数「count」「temp」「n-red」を使いました。

赤の数を数えるプログラムとフローチャート

プログラミングの意味は、まず変数「n-red」を0にします。そして、変数「count」を1にします。countが1, 2, 3, 4の場合の4回、繰り返します。

まず変数「count」が1かをチェックします。これがyesなら、変数「temp」を変数「ichi-a」と同じにします。

noなら、変数「count」が2かをチェックします。これがyesなら、変数「temp」を変数「juu-a」と同じにします。

noなら、変数「count」が3かをチェックします。これがyesなら、変数「temp」を変数「hyaku-a」と同じにします。noなら、変数「temp」を変数「sen-a」と同じにします。

そして、変数「temp」が変数「ichi」と同じかをチェックします。これがyesなら、変数「n-red」に1を足します。

次に、変数「temp」が変数「juu」と同じかをチェックします。これがyesなら、変数「n-red」に1を足します。

次に、変数「temp」が変数「hyaku」と同じかをチェックします。 これがyesなら、変数「n-red」に1を足します。

最後に、変数「temp」が変数「sen」と同じかをチェックします。 これがyesなら、変数「n-red」に1を足します。

これで変数「count」に1を足して、最初に戻ります。4回繰り返すことで、countが1, 2, 3, 4の場合の4通りができます。

これだけだと緑の場合も数えられてしまっているので、「n-green」から「n-red」を引いて、それを「n-red」にします。これで赤の判定は終わりです。

前回のプログラムと合わせて、こんな感じになりました。

試しに、パンダを起動して、合ってるかのチェックをしました。 数字が1234に固定されているので、パンダの言った数字と1234を比較しました。

この場合、4631が正解で、こちらが1234なので、緑が1つ、赤が2つなはずです。

変数を見ると……n-greenが1、n-redが2!

できました~!

次回は、このn-greenとn-redの数に応じてLEDを光らせる プログラムを作りたいと思います。

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

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

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

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

バックナンバー:

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:コードブレーカーの暗号を作る(小学生こう君のブログ )

--

--

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

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