2020年4月23日からtoio™コア キューブが単体で販売されるようになった。それに合わせて「toio」ではじめよう、おうちでロボット開発キャンペーンというのをやっていたので応募してみたら「開発者向けマット(仮称)サンプル版」がスイッチサイエンスから送られてきたので、簡易カードを使って逆ポーランド記法の計算をやらせる何かを作ってみた。
購入したもの
仕様
- 「?」の簡易カードの上にキューブを置いたら読み取りを開始する
- 左から右にキューブを動かして簡易カードを読み取る
- 「=」の簡易カードの上にキューブがきたら、逆ポーランド記法の記法に従って計算を行う
- 計算した結果の数字の回数だけ適当に音を鳴らす
- 数字は1〜9までとする(10とか100とか2桁以上はナシ)
- 簡易プレイマットはあえて使わない方向で
簡易カードの仕様
簡易カードは切り離して使用する。toio コア キューブ(単体)付属の簡易カードに色々書いてあるが、ビジュアルプログラミングではそのままマークで判定できるので気にしなくてOK。
簡易カードには座標情報がないので、座標指定系の移動命令は使えない。なので、前に何秒移動するといった秒指定の命令を使う。移動速度を落とすと曲がって行きがちなので速度は50以上がおすすめ。
処理の流れ
- 「?」の簡易カードを読み取ったら前へ5秒程度動かす(途中で止まらない程度の秒数で)
- 簡易カードを読み取ってリストに追加する
- 「=」の簡易カードがきたらキューブを停止して計算を開始する
- 逆ポーランド記法の計算
- 簡易カードリストの先頭から順に演算子がくるまで数字をスタック用リストに追加する
- 演算子がきたらスタックリストの2番目、1番目の値で計算する
- 計算結果をスタックリストに追加する
- 上記3処理を簡易カードリストの中身がなくなるまで繰り返す
- 計算結果を音で知らせる(数字の数だけ適当に音を鳴らす)
プログラム
ファイルはgithub(sample2.sb3)に上げておいた。
「「?」に触れたとき」から始まる部分がプログラムの開始部分、「ずっと」で始まる部分が読み取りと計算部分になっている。定義「逆ポーランド記法計算」のところは処理の流れの通りに書いただけで、記法が間違っている場合のエラー処理的なものは省略している。
今回は数字を1桁だけにしたが、読み取り部分を少し変更すれば2桁以上も簡単にできると思う。(簡易カードが読み取れない(NaN)を数字の区切りにするなど)
実行結果
とりあえず期待通りの動作をするものができたが、計算式が長すぎるとキューブがOBして読み込めないみたいなことがあったので、簡易プレイマット上で座標を使いながら動くようにしたほうがいいかもしれない。
1UP音は怒られそうな気がしなくもない。