マインクラフトでデジタル回路の勉強はできるか? マインクラフトのレッドストーン 回路入門 プログラミング教育用に基礎の基礎を書いてみる3
こんにちはK研究員です。
今回はアドベントカレンダー向けにお堅い記事を書いてみます。
アドベントカレンダーはこちら。
プログラミング教育の一環として、マインクラフトのレッドストーン回路でコンピューターに使われるデジタル回路を勉強するというのが今回の趣旨になります。
まず、マインクラフトでデジタル回路の勉強ができるかということですが、結論から言うと、マインクラフトのレッドストーン回路には信号の強度というアナログ的な要素もあるのですが、おおむねON、OFFのデジタルな回路として考えることができます。デジタルとはフランス語で指を表す言葉が語源になった言葉で、(指を折っているか伸ばしているかの) 二つの状態のみを考えるようなものを指します。デジタル回路も電圧が高い、低いの二つの状態のみを考えるような回路です。マインクラフトのレッドストーン回路も赤く光っている時と、光っていないときの二つの状態があるのでデジタルです。
二つの状態しかないと単純なものしかできないのではと思うかもしれませんが、世の中にはすごいレッドストーン回路であふれています。
なぜでしょうか。
二つの単純な状態しかないので、逆に簡単にたくさん組み合わせ出来て、すごく難しいものが作れるのです。面白いですね。
でも二つの状態しかないのにどうやって複雑なことをするの?
一つのレッドストーン回路は二つの状態しかないですが、それが複数本あれば大きな数を表現できます。光っている状態を1、光っていない状態を0として4本の回路があると、16種類の組み合わせがあります。
それに数字を割り当てたものを2進数と呼びます。
それでどんなことができるの?
例えばパスワードを知らないと入ることができない扉を作ることができます。以前紹介したこの本にも作り方が記載されています。今回はデジタル回路の考え方も交えて説明していこうと思います。
目的は下の画面のスイッチをON, OFF, ON, OFFにしたときだけ開くような扉を作ることにしましょう。扉が開くには、最終的にONの信号が出てくればいいので、ON, OFF, ON, OFFの時にONが出てそれ以外はOFFが出るような回路が作れればいいですね。
ON, OFFと毎回書くのは長くなるので、ONは1, OFFは0と書いています。つまり1010の時だけ1になるような回路が目標となります。
このように、入力と出力を表にしたものを真理値表といいます。覚えなくてもいいですが、名前がかっこいいのでつい覚えてしまいますね。
NOT回路
ONをOFFに変え、OFFをONに変える反転の回路をNOT回路と呼びます。NOTは否定(XXではない)を表すので、ONではない=OFFということです。これはレッドストーンたいまつ、正確にはレッドストーンたいまつをくっつけたブロックで簡単にできます。レッドストーンたいまつを付けたブロックにONの信号が来るとたいまつはOFFにOFFの信号が来るとONになります。
右が正しい例です。左のようにたいまつだけではできません。
AND回路とOR回路
コンピューターの世界では、二つの入力がONの時ONになってそれ以外の時はOFFになるような回路をAND回路といいます。ここでANDは「かつ」を意味します。入力の一つ目がONかつ二つ目がONのときONになるということです。
一方、二つの入力のどちらかでもONなら出力がONになるような回路をOR回路と呼びます。ORは「または」を意味します。入力の一つ目がONまたは二つ目がONのときONになるということです。
OR回路は普通につなげるだけでできますが、AND回路はちょっと難しいです。まず二つの信号を反転させます。反転させるのはNOT回路(レッドストーンたいまつ)でできます。で、それをくっつけるとどっちかがONならONが出てきます。つまりもともとどちらかがOFFならこの時点ではONです。それをさらに反転させると、AND回路が作れます。
この回路だとどっちかがOFFならOFFになります。
コンパクトに作るとこんな感じです。
NOT回路とAND回路を使ってパスワード付きの扉を作る
まず、ON,OFF,ON,OFFの状態にして、OFFの信号が来るところをNOT回路で反転させます。
そうすると、正しいパスワードの時は全部ONになってるはずですね。なのでAND回路で二つずつ組み合わせます。そうすると、その両方がONになるはずです。
さらにその二つをANDでつなげば出来上がりです。
正しい、ON, OFF, ON, OFFの時だけ扉が開きます。
いかがでしょうか。ちょっと難しいかもしれないですね。
さらに工夫するには
今の回路は16通りの組み合わせをすべて試せば扉が開いてしまいます。これでは面白くないので、さらにスイッチを増やしてみるとか、日照センサーを組み合わせて朝しか開かないようにするなどしてみると面白いと思います。デジタル回路は簡単に組み合わせて複雑なものが作れるというあたりが体感できるかと思います。
デジタル回路を学ぶとプログラミングに役に立つの?
デジタル回路は論理回路と呼ばれたりもしますが(厳密には意味が違いますが)、ON, OFF(プログラミングでは真、偽を表すTrue, Falseが使われます)をANDやORやNOTでつないでほしい出力を得るのはプログラミングでも同じなので訓練になります。
また、コンピューターはデジタル回路で作られているので、コンピューターの仕組みを理解でき、よりコンピューターに合ったプログラムが書け、スピードが速かったりリソースをあまり使わないプログラムになるかもしれません。
今回はこの辺りで。
無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。