![見出し画像](https://assets.st-note.com/production/uploads/images/70133729/rectangle_large_type_2_a86363e1e86ed65eb5ca15c54875db16.png?width=1200)
【Robo Blocksの使い方】2つの処理を同時に動かす
ソフトバンクロボティクスでPepperを使ったプログラミング教育を担当してる佐藤です!
今回は複数の処理を同時に動かす方法をご紹介します!
トップブロックを複数個置く
プログラムを作るとき、一番上にトップブロックを置きます。スタートボタンが押された時にこのブロックの下にあるブロックが順番に動きますが、これが複数あるとどうなるでしょうか。
![](https://assets.st-note.com/img/1642423492190-D9BjlxtV6P.png)
実際に動かして試してみます。
以下のようにトップブロックを2つ設置してみました。
![](https://assets.st-note.com/img/1642423595084-80TeQvxpkv.png?width=1200)
この状態でスタートボタンを押してみると、「こんにちわを喋る」と「右手をあげる」が同時に動きました。
複数のトップブロックを設置すると、それぞれ同時に動かすことができるというのが今回紹介するテクニックです。
使い方
アイディア次第で様々な利用方法があると思いますが、1例としてプログラムが動き始めてからの時間を図りたいような場面を想定してみます。
起動からの時間を測るために以下のように組んでみました。
("0=1になるまで繰り返す"は条件が満たされることがないので無限にループします。ループの使い方はこちらの記事をご覧ください。)
![](https://assets.st-note.com/img/1642424177478-ZKh3H4Z40j.png)
このプログラムに、以下のような5秒ごとに秒数を読み上げてくれるような機能を追加したくなったとします。("○のあまり"ブロックについてはこちらの記事をご覧ください)
![](https://assets.st-note.com/img/1642424600478-9KVf4yMkOV.png)
この場合どこに追加すれば良いでしょうか。
先ほどの秒数をカウントする部分の下にくっつけたとしても、秒数のカウントは無限にループしていますから次のブロックが実行されることは永遠にありません。
![](https://assets.st-note.com/img/1642424968988-uWjIbQ6s21.png?width=1200)
そこで、トップブロックを2つ配置しそれぞれのループを別々に動かします。
![](https://assets.st-note.com/img/1642425053588-AFdcmmcer5.png?width=1200)
このやり方だとループが2つ動いた状態になり、秒数のカウントと5秒毎の発話が両方動き、やりたかった動きを実現することができました。
まとめ
今回はトップブロックを複数使うことによって同時に処理を動かす方法を紹介しました。
今回は"旗がクリックされたとき"ブロックを使いましたが、一番上になれるブロックであればなんでも使えますので、"頭を触られたとき"などでも同じことができます。
このテクニックは便利ですが、バグが出やすいので要注意です。
同じ条件で動く箇所が複数あるため、考慮漏れから思わぬ挙動になったり、意図しない無限ループが永遠に動き続けて負荷をかけたりすることもあります。
プログラミングに少し慣れてきて、他に実装できる方法がなさそうだなと思った時に初めて利用を考えるぐらいでも良いのかなと思います!