離島プログラマの雑記

島根県の離島、隠岐・西ノ島に移住して子育て中のフリープログラマです。

プログラミング教室近況 〜マイクラのレッドストーン回路で色々つくってみる〜

昨日のプログラミング教室は、マイクラ(Minecraft)でレッドストーンという回路が組めるブロックを使って色々つくってみました。


[Minecraft] レッドストーン回路でTNTキャノンを作ってみた

イクラでプログラミングしようとした場合、MakeCode などのマイクラ世界の外側にあるツールと連携させてScratchのようなブロックインタフェースでプログラムを書くことが多いのですが、マイクラ本体にもレッドストーンいう回路ブロックが実装されており、これで回路を組むことでスイッチ、センサーなどの入力を受けてピストン、発射装置などの出力を制御することができます。コンピュータ上のプログラミングというより、現実世界のハードウェア制御に近いので Arduino のようなマイコンでなにか作る感覚に似ています。

レッドストーン回路の良いところは、Scratch のように「ことば」による論理組み立てを行わなくても、ちゃんと動くものが作れるところです。今回は小学2年生の生徒にレッドストーン回路の基本的な使い方を教えてみたところ、レバーを操作して照明を点灯させるシステムを改造して、3つの花火を打ち上げるようにしたり、さらに遅延調節できるリピータを使って信号を遅延させることで、花火の打ち上げタイミングをずらしたりできました。自分で配線を考えてものをつなげたり、信号が伝わっている様子が目視できたりするのは、言語によるプログラミングよりも直感的に理解しやすいのかなと思います。

また、レッドストーンのシステム自体がマイクラ本体に実装されているというのもポイントで、外部ツールを連携してプログラミングを行う場合、すでにマイクラで遊んでいる子供たちはプログラミングはチート行為、つまり「ずるい」ことであるという感覚をもっている場合があります(外部ツールでは、本来は「ツルハシで地下から希少な鉱石を掘り出して、それを集めて合成して特殊なブロックを得る」といったような複雑な手順をスキップして、最初から特殊なブロックを大量に並べたりできる)。その点、レッドストーンはマイクラ世界の常識と矛盾しない位置づけとなっているため、子供たちにとっても受け入れやすいようです。

授業の最後には、TNTブロック(爆発させてダイナマイトのように地面を削ったりできるブロック)を遠くに発射する装置を一緒に考えて実現できました。単純に回路のプログラムを考える以外にも(マインクラフト内の)物理法則や道具の使い方、ブロックの性質など色々考慮する必要があり、設計はなかなか複雑な作業です。マイクラ歴は生徒のほうが長いので、マイクラ内での経験から得た知識や、友達や動画で得た知識などが豊富で、こちらもマイクラ世界の常識などを教わったりしながら進めました。

例えば、この装置の設計については以下のような議論や実験をしました。

  • TNTブロックを遠くに飛ばすための推進力をどうやって得るか?(発射装置自体の威力は弱く、単にTNTブロックを発射しても装置の目の前に落ちてしまい、装置もろとも吹き飛ばしてしまいます笑)

    • 案1) TNTブロックをピストンで押し出す
      • 実験の結果、ピストンではブロックを遠くに飛ばすような推進力は得られなかった
    • 案2) TNTブロックを氷の床で滑らせて遠くまで運ぶ(プレイヤーは氷上で滑ることから発想)
      • 実験の結果、TNTブロックは氷の床の上を滑らなかった
    • 案3) TNTブロックを別のTNTブロックの爆風で吹き飛ばす
      • 実験の結果、TNTブロックに隣接する別のTNTブロックは、爆風によって吹き飛ばず、その場で着火状態となるため失敗
        • ここで生徒の経験則で、以前に自分をTNTブロックで囲んで打ち上げる仕掛けを作った時は、確かにTNTブロックも吹き飛んでいたはず、とのことで再現してみる
          • 確かに吹き飛んでいくTNTブロックがあるが吹き飛ばないTNTブロックもある
            • TNTブロックの着火状態によって飛ぶ/飛ばないがあるのでは?という仮説を立てる
              • 着火状態のTNTブロックに他のTNTブロックの爆風を当てる
                • 吹き飛んだ!

という訳で、案3を採用。

他にも、

  • 推進用のTNTブロックの爆風で発射装置自体が壊れないようにするには?

    • 爆風を受ける壁は「岩盤」(TNTの爆風でも壊れない非常に硬いブロック。このブロックの存在は生徒に教えてもらいました)を使用する
      • 爆風が届かない程度の高さに発射装置を配置する
    • 壁に垂直にはレッドストーン回路が配線できない
      • 発射装置まで階段上にブロックを配置して配線
  • 推進用TNTブロックと飛ばされるTNTブロックの発射タイミングをどうやって制御するか?

    • 花火の打ち上げタイミングをずらしたやりかたと同じように、リピータを使って飛ばされるTNTブロックの発射タイミングを遅らせる

などの諸問題を解決してやっと完成しました。

f:id:k-aeg:20181029104948p:plain

f:id:k-aeg:20181029105024p:plain

動作する様子は(ちょっとわかりにくいですが)冒頭の動画をごらんください。

さて、傍から見るとゲームで遊んでいるだけに見えたりして、こんな無駄なものを作って何の意味があるのか?と問うのはナンセンスと思います(笑)

こういったものを熱中して作る過程で、知識や経験から仮説を立て、実験・検証し、実装するという一連のプロセスや、うまくいかない場合は事象を分解して考えるといった方法を自然と身につけることができます。これはものづくりに限らず、色んな場面で応用の効く力になると思います。

また、小学生の彼ら/彼女らにとって熱中できることがあるのは非常に重要で、その興味の範疇にあるものはすごい勢いで吸収し、また自分の力で考え、発展させることができます。一方、大人が将来役に立つよと言って押し付けるものは、大抵の場合、子どもたち自身にとっては重要でないものであり、自分ごとにはならず、なかなか身につきません。

つまり大人は、子供たちの目線で見て重要なものは何か?ということを考えて、それを尊重することが個性や創造力を引き伸ばす鍵になると思います。また、彼ら/彼女らとちゃんと議論しようと思ったら、子供扱いをせず対等な立場で接することが重要で、大人対子供、先生対生徒という上下関係の中での議論は一方的になりがちです。結果、子供は相手から正しい答えが出てくるのを待つようになり自分で思考することを放棄してしまいます。

子供との議論の中で、難しい説明は理解できないだろうと思って平易なことばで簡略化してしまうこともやってしまいがちですが、今回は、設計が少し複雑になってきた時、生徒が自分で紙とペンを持ってきて図を描いて整理しようしました。ことばにすると複雑な概念でも図にすると子供でも直感的に理解できるような話も多く、ことばによる思考や伝達が未熟な低学年でも、図解などの非言語的手段であれば高度な思考やコミュニケーションが可能ということにも気付かされました。

f:id:k-aeg:20181028121623j:plain

f:id:k-aeg:20181028121631j:plain

というわけで、こちらも色々得るものがあったなーと感じる授業でした。