2024年12月20日

014-1.WeDo2.0スクラッチ入門-第8回「文字列でロボットを動かす」

この連載では「レゴ WeDo 2.0(以下、WeDo 2.0)」と「Scratch(スクラッチ)」を使ってプログラミングの方法を紹介します。なお、「WeDo 2.0 ソフトウェア」を使ったプログラミングの方法については、すでに「WeDo 2.0入門」で紹介していますので、そちらをご覧ください。(文/松原拓也)

◆ ロボットとブロックを使う

前回に引き続き、WeDo 2.0のセットを使って移動できるロボットを作ります。写真のロボットを用意しましょう。

今回は連載の最終回です。そこで、できるだけ難易度の高い内容にしたいと思います。前回に作ったプログラムは自作のブロックでロボットを動かしていましたが、これを文書でロボットが動くようにします。たとえば、ロボットを前進させたい場合には「ugokasu」という文字列を使って動かします。

文字列の入れ物として、「リスト」という機能を使います。
リストを使うには、スクリプトの「データ」の項目にある「リストを作る」ボタンを押します。 ボタンを押すと、ダイアログが表示されますので、リストの名前を入力します。リストの名前は自由に付けることができますが、ここでは「list」としました。

リストが作成されました。ステージの左上にあるのがリストです。 「EMTPY」は空っぽという意味です。 右側にはリストを操作するためのブロックが表示されます。

ロボットの命令を文字列に置き換えると、こうなります。
「ugokasu」「mawasu」ブロックがなくなって、かわりにリストを追加するためのブロックになりました。「ugokasu」はロボットを前進させる命令です。数値はおおよその移動きょりを示しています。「mawasu」はロボットをせん回させる命令です。数値は角度です。 値がプラスの場合は時計方向にせん回します。値がマイナスの場合は反時計方向にせん回します。

プログラムを実行すると、このようにリストに5つの文字列が追加されました。1~5という数値はリストに格納している文字列の番号です。 この場合、リストに「追加」した順番を表します。

なお、プログラムを二度続けて実行すると、こうなります。すでにあるリストに同じ内容が追加されてしまいます。

同じ内容を追加させたくない場合は、プログラムの最初にリストの中身をすべて消す処理を入れておくといいでしょう。

◆ 文字列を解読するプログラム

実験として、リストの中から数値だけを取り出すプログラムを作ってみます。
下準備として、「hitomoji」「index」「kazu」という3つの変数を作ります。

出来上がったプログラムがこちらです。プログラムの中にある空白(半角のスペース)データなし(文字が存在しない)が同じように表示されてしまいます。見分けがつかないので入力する時には注意しましょう。

プログラムの実行結果です。
キーボードのスペースキーを押すと、吹き出しに「60」と表示されました。「ugokasu 60」という文字列の中から「60」の部分だけを抜き出します。 処理が終わった行は先頭から削除していきます。
実行を繰り返すと「90」「60」「-90」「60」の順に表示します。

プログラムの中で何が起きているのか、図にしてみました。 リストの1行目には「ugokasu 60」という文字列が入っています。ここから「60」だけを抜き出しています。

スペースキーが押されると、最初に文字列の中から空白を探します。変数indexに1を入れて、1文字ずつ読み取っていきます。 この場合、8文字目で空白が見つかりますので、indexの値は8になります。

続いて、indexの値に1を足します。この場合だと9になります。これで空白を読み飛ばします。 そして、変数kazuの中身をデータなしの状態にします。

変数hitomojiに1文字ぶんのリストの内容を代入します。

リストの1行ぶんの終わりまで、変数kazuに変数hitomojiを足します。 ループの1周目では「6」を足します。ループの2周目では「0」を足します。結果として変数kazuには「60」が格納されます。
少し処理がまわりくどいように思えるかもしれません。しかし、こうすることで文字や数値の長さが変わってもうまく読み取ることができます。「ugokasuuu 9999」でも「ma -123」のような文字列でも読み取れます。ただし、「ugokasu100」のように途中で空白が入っていないとうまく読み取ることができません。

◆ 文字列で命令するロボット

以上のプログラムにロボットの移動とせん回機能を追加します。完成したプログラムがこちらです。

先ほどのプログラムはスペースキーを押すと、1行ぶんの文字列を解読していましたが、このプログラムでは自動的に全部の文字列を解読します。 文字列の最初の一文字目を比較して、関数を呼び出します。「u」ならば「ugokasu」ブロック、それ以外なら「mawasu」ブロックを呼び出します。

「ugokasu」ブロックと「mawasu」ブロックは前回の記事の最後に作ったものをそのまま使います。 ここで、ちょっと技術的な問題が発生します。異なるファイルから自作したブロックをコピーする必要があります。 これを行うには「バックパック」という機能を使います。
コピーしたい元のファイルを開いてから、バックパックというウインドウを開きます。そして、コピーしたいブロックをバックパックへドラッグ&ドロップします。 ここでは「ugokasu」ブロックと「mawasu」ブロックを2回に分けてドラッグ&ドロップしました。

それから、コピー先のファイルを開いて、バックパックを開きます。パックパックには先ほどのブロックが保存されています。 これをドラッグ&ドロップしてブロックを配置します。
これで、異なるファイルからブロックをコピーすることができました。

プログラムを実行すると、ロボットがジグザグに進みます。この動きは前回と同じです。見事、文字列で命令するロボットができました。このプログラムを改良して、命令の種類を増やしてみると面白いかもしれません。
以上で、WeDo2.0 スクラッチ入門を終わります。スクラッチは手軽に使えて機能が豊富です。ぜひ、自分のパソコンでも動かしてみましょう。

今回作成したプログラム(スクラッチ2.0用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。