8月14日 「NQCでプログラムを作ってみるか?」とこうしろうに声をかけた。最近Visual Basicの解説本をパラパラと眺めている彼は「やってみる」とふたつ返事だった。NQCはフリーソフトで、Mindstorms用のプログラム言語(コンパイラ)である。DOSベースのソフトウェアであるが、RCXCC(RCX Command Center)という統合開発環境を利用することによりWindowsから使用できる。NQC(Not Quite C)はその名の通りC言語に似たプログラミング言語であり、Mindstormsの頭脳RCX用の命令を多く備えている。(詳しくは第21話を参照)RCX Command Centerの開発者Mark Overmars教授のテキスト『Programming Lego Robots using NQC』を桐蔭横浜大学工学部電子情報工学科のアルベルト・パラシオス・パウロブスキ博士が日本語訳されているので、それを元にNQCを学習して行こうと思う。

 かずが無限軌道車を作成して、プログラミング・スタート。



まず、私が

task main()
{
}

と入力し、「taskは仕事という意味で、mainはプログラムの中に必ずひとつ必要で、プログラムの実行はそこから始まるんだよ。」と説明した。“{”と“}”の間に、こうしろうがテキストを見ながら、プログラムを入力していく。

OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);

私はこうしろうが入力していくかたわらで、ステートメントの意味を解説していく。
「行はセミコロン(;)で終わるんだよ。」
「セミコロンってどれ?」とこうしろう。
「そこのチョンチョンだ。」といいかげんな説明の私。(チョンチョンはコロンだ。セミコロンはなんと言えば良いのか?「チョンチョーン」かな。)
「OUT_AはモーターのAで、OUT_CはモーターのCだね。OnFwd(オン・フォワード)はモーターをオンして、順回転に設定するんだ。Wait(400)は、4秒間そのまま。OnRev(オン・リバース)はモーター・オンと逆回転だ。Offでモーターが止まるんだ。」初めてのNQCプログラミングなので懇切丁寧な説明をした。こうしろうは、インターネット懸賞応募で鍛えたキーボード入力といつの間にか身に付けた合理的精神(別名なまくらさ)でコピー&ペーストを駆使し、ちょこちょこっとプログラムを入力した。もちろん、入力後のプログラムは以下のようになっている。

task main()
{
 OnFwd(OUT_A);
 OnFwd(OUT_C);
 Wait(400);
 OnRev(OUT_A+OUT_C);
 Wait(400);
 Off(OUT_A+OUT_C);
}

ファースト・プログラムなので、main関数だけの単純なものだ。

 「さて、次はコンパイルだ。」「コンパイルって何?」というこうしろうの質問に、待ってましたとばかりに答える。「人間にわかる言葉で書いたプログラムを、機械にわかる言葉に翻訳することだよ。間違いがあると、エラーが出るんだ。」コンパイルとダウンロードを終え、テストを行う。無限軌道車は4秒間前進し、同じだけ後退した。

 「こうしろう、NQCとRCXCCはどう?」と尋ねると「あっち(Mindstormsの標準開発環境)より面白い」と答えた。実は筆者、NQCをこうしろうに教えることに少々ためらいがあった。Mindstormsに特化し、ポインタ演算などが除かれ簡略化されているとはいえ、NQCの仕様はC言語に近い。ちょっと小学生には難しすぎるのではないか…と。しかし、それを「面白い」と言わせてしまうMindstormsの『自分で作ったロボットが、自分で作ったプログラムで、すぐ動く』という素晴らしい特性にあらためて感心した。「NQCでプログラミング」はシリーズ化しそうである。