OCEANS

SHARE

  1. トップ
  2. ライフ
  3. 工作とのコラボも楽しい。「Nintendo Labo」で自作プログラムに挑戦!

2018.07.06

ライフ

工作とのコラボも楽しい。「Nintendo Labo」で自作プログラムに挑戦!

「左脳を刺激する! オッサンIT化計画」を最初から読む
工作とのコラボも楽しい。「Nintendo Labo」で自作プログラムに挑戦!
段ボール工作をSwitch本体やコントローラー(ジョイコン)と組み合わせて多彩な遊び方ができるだけでなく、「Toy-Con(トイコン)ガレージ」という自作プログラムが作成できる場まで用意されている「Nintendo Labo(ニンテンドー ラボ)」(前回前々回の記事を参照のこと!)。
初心者でも簡単に、しかも楽しくプログラミングの基本を学べるので、子供の教育にも最適なガジェットだ。とはいえ、教育の道具として使うためには、まず大人が使い方を理解しておきたいもの。今回は子供の前で大きな顔ができるように、少しだけ複雑なプログラムに挑戦しながら、「ニンテンドー ラボ」らしくプログラミングと工作が融合した“遊び”を追求してみたい。

「ノード」をつないでプログラミング。とにかく楽しい「トイコンガレージ」

さまざまな役割を持つ「ノード」と呼ばれるパーツを線でつなぐことで、プログラミングを行う「ニンテンドー ラボ」の「トイコンガレージ」。

例えば「ジョイコンを振ったら(信号を出す)」というノードと、「(信号を受けたら)画面が光る」というノードのふたつを配置し、線で結ぶだけで、「ジョイコンを振ったら、画面が光る」というプログラムが完成する。ちなみに信号を出すノードを「入力ノード」、信号を受けアクションを起こすノードを「出力ノード」と呼ぶ。

たったこれだけでも、ファミコン世代にとっては十分に感動的なのだが、ネット世代の子供たちを前にして、この程度で満足していては、大人の威厳を保つのが難しいかも……という懸念もある。ここはひとつスキルアップも兼ね、もう一歩進んだプログラムに挑戦してみたいところだろう。
そこで、ただ画面が光るだけではなく、「ジョイコンを振るごとに、光る場所が順番に変わる」というプログラムを組んでみることにした。なお、操作方法やノードの種類など「トイコンガレージ」を使ったプログラミングの基本を詳しく知りたい人は、前回の記事をあわせて参照してほしい。
2/4

試行錯誤もまた楽し。パズルを解くようにプログラムを攻略しよう

「ジョイコンを振るごとに、光る場所が順番に変わる」プログラムも、基本の流れは「ジョイコンを振ったら、画面が光る」プログラムと同様だ。まずは、「ジョイコンを振ったら」という入力ノードと、「画面が光る」という出力ノードを、光らせたい場所の数だけ配置し、ノードとノードを線でつないでみよう。

「カウンター」は、入力ノードから送られた信号の数を数えて、指定した条件に合う数(の範囲)になったときに(つながっているノードに)信号を渡す、という役割を果たす中間ノードだ。条件の指定は、ノードの「設定」ボタン(歯車の形)をタップして表示される画面で行う。
たとえば下の画面は、スライダーで数を「1」~「1」とすることで、入力ノードから送られた信号の累計が「1」になったときに信号を渡す、という設定をしたことになる。つまり、ジョイコンを1回振ったときに、信号が渡される(0回、または2回以上では渡されない)というプログラムを組んだわけだ。

同様に「『2』になったとき」「『3』になったとき」「『4』になったとき」というカウンターを配置し、入力ノード(ジョイコンを振る)と出力ノード(画面が光る)の間に挟むようにして、線でつなぐ。

試しにジョイコンを振ってみると……。思惑どおり、ジョイコンを振った回数に応じ、対応する場所が光るようになった。しかし、これだけではまだ不十分。なぜなら4回以上ジョイコンを振ると、どのカウンターも反応しなくなり、画面が光らなくなってしまうからだ。
この問題を解決するためには、どこかのタイミングでカウンターの数をリセット(0に戻す)する必要がある。
ここで重要なのが、中間ノードの線のつなぎ方。入力ノードと出力ノードの間に挟む中間ノードは、左右両方に線をつなぐ端子があり、「カウンター」の場合は左側に「+(数を1つ足す)」、「-(数を1つ減らす)」、「0(数を0にする)」という3つの端子が用意されている。
つまり「0」を使えば、カウンターの数がリセットされるわけだ。配線がちょっと複雑になるので、図版で説明しよう。

まずは「カウンターD」の配線(緑の線)に注目。「光る」だけでなく、カウンターA~Cの「0」とも線でつなぐことにより、対応する画面を光らせるのと同時に、A~Cのカウンターをリセットさせている。
ただし、これではやはりカウンターDの数値が増えたままになってしまうので、カウンターAとカウンターDの「0」とをつなぐ(赤い線)。これで、カウンターAが「1」になったときに、カウンターDがリセットされるようになる。
プログラムとしては、これで完成! のはずだったのだが。実際に動かしてみると、何故か思惑どおりには動いてくれない。プログラムが2巡目(最初にカウンターDがリセットされて以降)になると、4番目の「光る」が反応するタイミングがずれてしまうのだ。
試行錯誤の結果、カウンダ―Dの設定を「『4』になったとき」から「『2』になったとき」に変更することで、順序良く画面が光るようになった。詳細な説明は省略するが、各カウンターが「0」にリセットされることで、タイミングに余分が生じることが原因のようだ。あらためて上の図を見て、論理パズルを解くように考えてみれば、なぜカウンターDを「2」に設定する必要があるのか、わかってもらえると思う。
おそらく、より適切なプログラムもできるのだろうが、筆者のスキルではこれが限界。こだわりたい人は、さらなる工夫を考えてみるのも楽しいだろう。とはいえ、プログラミングの初歩としては「取り合えず目的通りに動けばOK」という考え方でも良いはずだ。
3/4

次の記事を読み込んでいます。