AND回路とは、2つ以上のレッドストーン信号入力があり、全ての入力がオンの時のみ出力がオンになる回路です。
※本サイトでは、ブロックやアイテム名はJava版の名称を用いています。統合版の方は以下の通り読み替えてください。
- レッドストーントーチ ⇒ レッドストーンたいまつ
構成
AND回路の原理
なぜこうなるの?と思うかもしれません。原理がわかりにくいですね。説明のため、わかりやすくAND回路を組みなおしてみましょう。
AND回路は、3つのNOT回路と1つのOR回路から構成されています。
それぞれの入力信号をNOT回路で反転し、それらを合流させてOR回路にしています。その信号をさらにNOT回路で反転しています。
では、片方のレバーをオフにしてみましょう。
入力Aのレバーをオフにしました。その先にあるNOT回路1のレッドストーントーチが点灯し、その先のOR回路もオンになります。NOT回路3でまたオンオフが反転して出力がオフになっています。この回路で出力をオンにするには両方のレバーをオンにする必要があります。確かにAND回路になっていますね。
では、なぜ3つのNOT回路と1つのOR回路でAND回路になるのでしょうか?
ベン図で考える
この原理を、マイクラをやっている人に例えてみましょう。ベン図というものを使うとわかりやすくなります。
PCでゲームしてる人たちの集合を示しています。マイクラにはJava版と統合版があります。Java版で遊んでいる人たちをAで赤色、統合版で遊んでいる人たちはBで青色、そして両方で遊んでいるマニアな人たちは紫色です。マイクラをやっていない人たちは黄色です。
AをNOT回路で反転するとA以外、つまりJava版で遊んでない人たちですね。
ベン図ではこうなります。
BをNOT回路で反転するとB以外、つまり統合版で遊んでない人たちですね。
ベン図ではこうなります。
そして、それらをOR回路に通します。A以外またはB以外という事です。つまり、Java版で遊んでない人または、統合版で遊んでない人たちを紫で示します。
Java版で遊んでない人たち、あるいは、統合版で遊んでない人たち、とはどういう事でしょうか?
以下のいずれかになるはずです。
- Java版でマイクラやってるけど統合版持ってない人たち
- 統合版でマイクラやってるけどjava版持ってない人たち
- そもそもマイクラをやっていない人たち
という訳で白くなっているところはJava版と統合版両方持ってて遊んでいるマニアな人たちです。
もうここまで来たらわかりますよね。さらにこれをNOT回路で反転するとこうなります。
Java版と統合版の両方で遊んでいるマニアな人たちが残りました。これがAND回路です。
ド・モルガンの法則
実はこれ、ド・モルガンの法則そのものです。
マインクラフトというゲームが素晴らしいのは、このような理解しにくい法則を遊びながらにして学べる事です。おじさんはAND回路にド・モルガンの法則が含まれているのに気づいたとき感動しました。テスト勉強で、なんだかよくわからないけど丸暗記してすぐに忘れてしまった法則ですが、マイクラではNOT回路とOR回路を組み合わせてAND回路が動作するのを実感できるのです。理解とはこういう事を言うのでしょう。
3個以上の入力
原理さえわかっていれば、入力が多くても回路が組めるはずです。すべての入力をNOT回路でレッドストーン信号を反転し、それらを合流(OR回路)させ、さらにNOT回路でもう一度反転すればOKです。
入力が5つある例です。各入力ブロックに直接レバーを設置しています。5つのレバーすべてをオンにしなければレッドストーンランプは点灯しません。
以下は、入力が3つでコンパクトな例です。
ただ、3個以上の入力を持つAND回路が何の役に立つかは…わかりません。
AND回路の使用例
このようにレッドストーン回路は原理さえわかれば応用が利きます。この回路が実際に使われるのは安全装置的なものになるでしょう。アイテムをチェストに入れると全てのアイテムを自動的に捨ててくれる自動ゴミ箱を作ったとします。しかし、アイテムを入れた途端にアイテムが消されてしまうと間違える事はできません。捨てるつもりが無いのに最強エンチャントしたネザライト装備を間違えて入れてしまったら大変です。ゴミが入っいて、なお且つレバーがオンになっている時に動作するようにすれば、間違いは少なくなるはずです。
このように自動化された装置を強制的に止める機能などにAND回路は使えます。
プログラム的に考えると
以下はプログラミングに興味のない方は読む必要ありません。
多くのプログラム言語(C, C++, C#, Java, javascript, PHP,…etc)では、NOTを『!』ORは『||』ANDは『&&』で表現します。これらは論理演算子といいます。
マイクラのAND回路をプログラム言語的に書くと
!(!A || !B)
となります。
ド・モルガンの法則は
!(A || B) == !A && !B
!(A && B) == !A || !B
です。『==』はプログラムでは等価、イコールという意味です。
2つ目の式の両辺にNOT演算子を掛けると二重否定は打ち消されAND回路になります。
A && B == !(!A || !B)