ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド解説-応用編その2:パスワードドアを作ってみよう!中級編-

  投稿日:2021/02/13

最終更新日:2021/02/25

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドの応用法として、パスワードドアを作ってみます。今回はその中級編です。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

 

前回のおさらい

前回は簡単なパスワードドアを作りました。パスワードドアとは、一定のパスコードを入力することで開くドアのことでした。要は、ある条件を満たさないと開かない鍵付きのドアですね。

そしてその過程で論理ゲートについて解説しました。論理ゲートとは0または1を1つ以上入力をすると、決まった値を返す電子回路、及びその論理演算を「ゲート」という形で表したものです。イクラ上では、主にレッドストーン回路(以後レッドストーンRSと表記)の形で表現されるのでしたね。

今回の内容は前回の内容が基礎となっているため、まだイマイチ理解できていない方は前回の記事 ↓ をご確認下さい。

 

前回作ったパスワードドアを簡単にする

前回は以下のようなパスワードドアを作りました。

f:id:YukimiD1999:20210207020410p:plain

前回ラスト時点でのパスワードドア

今回はもう少しこの回路を簡単にしていきます。

…とその前に、このまま解説するのは大変なので、ここからは入力・出力・論理ゲートだけにした簡単なRS回路で解説します。皆さんが実際に作る場合には、RS回路の断線や混線に気を付けながら自分で考えてアレンジしてみて下さい。

 

まずは前回ラスト時点でのパスワードドアのRS回路を、簡単な入力・出力・論理ゲートだけに作り直してみます。

f:id:YukimiD1999:20210211161925p:plain

[画像A1] 簡単な入力・出力・論理ゲートだけにしてみた

色の関係については前回ラストのものと変わっていませんが、もう一度リスト化しておきます。

  • 入力:
    ・金ブロック    :入力A(正解1)
    ダイヤブロック  :入力B(正解2)
    ・エメラルドブロック:入力C(不正解1)
    ・鉄ブロック    :入力D(不正解2)
  • 出力:
    ・空色コンクリ   :AとBのNAND回路の出力Q1
    ・青コンクリ    :CとDのOR回路の出力Q2
    ・ピンクコンクリ  :Q1とQ2のNOR回路の出力Q3
  • 論理ゲート:
    ・白コンクリ    :AとBを入力とするNAND回路
    ・黄色コンクリ   :CとDを入力とするOR回路
    ・オレンジコンクリ :Q1とQ2を入力とするNOR回路 

 

ドアが無くなりましたが、Q3に繋がっているRSランプがドアの代わりだと思って下さい。ドアが無いのにパスワードドアとはこれイカに。

 

さて、まずは入力をまとめて論理ゲートを簡単にしてみましょう。

白コンクリのNAND回路に注目してみましょう。白コンクリのNAND回路は、まず始めに入力A, BをそれぞれNOT回路によって反転させ、その後その反転した結果をOR回路で1つにしています。

…そう、NAND回路はNOT回路の結果をOR回路でまとめているだけなのです。つまり入力A, Bは、NOT回路で入力を反転させてから入力C, DとOR回路でまとめることができます。

 

ORゲート、NORゲート、ANDゲート、NANDゲートの4種は3入力以上あってもその特性は失われないんでしたね。そのため、以下の様にまとめられます。

f:id:YukimiD1999:20210211163824p:plain

[画像A2] さらに回路を簡単にしてみた
  • 入力:
    ・金ブロック    :入力A(正解1)
    ダイヤブロック  :入力B(正解2)
    ・エメラルドブロック:入力C(不正解1)
    ・鉄ブロック    :入力D(不正解2)
  • 出力:
    ・青コンクリ    :AのNOT回路の出力A'
    ・空色コンクリ   :BのNOT回路の出力B'
    ・ピンクコンクリ  :A', B', C, Dを入力とするNOR回路の出力Q
  • 論理ゲート:
    ・白コンクリ    :Aを入力とするNOT回路
    ・黄色コンクリ   :Bを入力とするNOT回路
    ・オレンジコンクリ :A', B', C, Dを入力とするNOR回路 

このようになりました。オレンジコンクリのNOR回路は4入力のNOR回路になりましたが、NOR回路の特性である入力の全てが0である場合のみ1を出力するという特性は失われていません。

 

さて、こうしてみてみると何かに気づきませんか?

そう、NOR回路でまとめるということは、正解パターンの入力の時にNOR回路に対する入力を全て0になるように元々の入力を調節してやればいいのです。

このパスワードドア回路で具体的に言うと、正解のレバーはNOT回路で入力を反転してから、不正解のレバーは入力をそのままNOR回路に入力すれば良いのです。

 

ではここで入力にEとFを追加し、正解のレバーにEを追加してみましょう。この場合、どうすれば良いでしょうか?

 

それでは答え合わせです。

f:id:YukimiD1999:20210211165538p:plain

[画像A3] 正解入力Eと不正解入力Fを追加してみた

もはや色分けされていませんが、入力は左からA, B, C, ... , Fです。入力A, B, EだけがNOT回路で反転されていますね。これでこのパスワードドア回路の論理ゲートの視点からの改造は完了です。

 

もっと機能を追加してみよう

さて、このパスワードドア回路はレバーで入力を行っていますが、ちょっと不便だと思いませんか?

実はこのパスワードドア、外にこのレバー群を設置してパスワードを入力した後、そのレバー群の内1つの入力が変化しない限りは空きっぱなしになってしまいます。

一応、以下のようにすれば空きっぱなしになってしまうのを防ぐことはできます。

f:id:YukimiD1999:20210211170634p:plain

[画像A4] 水色コンクリの入力レバーは部屋の内側にある設定

論理ゲート上の解釈としては、部屋の内側にも不正解のレバーを1つ置いているようなものです。

ですがこれでできるのは「空きっぱなしのドアを閉める」ことだけです。正解のレバーは下がったままなので、このままではパスワードが他人にバレてしまいます。流石にそんなパスワードドアは使いたくないですよね。

つまり、以下の機能を追加したいわけです。

  • 入力を内側からリセットできる機能
  • 内側からドアを開ける機能

これを実現するには、Latch(ラッチ)回路と呼ばれるものを使います。

 

Latch回路とは?

Latch(ラッチ)回路とは、1ビットの情報を保持できる回路の事を言います。このLatch回路も真理値表でその動作を表現することができます。

 

1ビットの情報を保持できるからなんやねん、という方が多いと思います。そんな疑問にお答えするため、丁寧に解説していきます。

 

なお、LatchまたはFlipFlop(フリップフロップと聞いて「ああ、その話をするのね」と予想の付いた方は、このLatch回路の解説は読み飛ばしていただいても構いません。

また、厳密にはLatch回路とFlipFlop回路は異なるものですが、RS回路を構築する上では「どのような出力結果になるのか」という点が一番重要なため、当ブログでは同じものとして扱います(FlipFlopもLatchと表記する)。

 

さて、1ビットの情報を保持できると何ができるのかというお話ですが、その答えは皆さんもう知っています。実は、今まで使っていたレバーがこのLatch回路の1種とみることができます。

レバーは1回右クリックすると、もう一度右クリックするまでRS動力を出力し続けますよね?これは言い換えると、レバーは一度右クリックすると、次に右クリックされるまで入力を保持できる、つまりは1ビットの情報を保持できると言えます。このレバーが入力を保持できるからこそ、今まで作って来たパスワードドアは成立するのです。

このパスワードドアの入力にボタンを使ったとすると、かなり高速でパスワードを打ち込んだ上でドアに猛ダッシュしなければならなくなります。入力数が少ない内はそれでいいかもしれませんが、正解のボタンが10個ぐらいあったとしたらもはや常人技では不可能ですね。

 

Latch回路の重要性及び便利さに関しては、具体的なLatch回路の種類を見てみた方が早いと思います。それではここからは、Latch回路達の一部を見ていきましょう。

 

SR-Latch回路

f:id:YukimiD1999:20210211175230p:plain

SR-Latch回路の一例
  • 入力:
    ・空色コンクリ  :S
    ・青コンクリ   :R
  • 出力:
    ・ピンクコンクリ :Q
    ・オレンジコンクリ:notQ

SR-Latch回路2入力のLatch回路で、2入力がどちらも0ならば出力を保持し、1になるとセット・リセットの動作をします。また大原則として、出力QとnotQが常に反転関係にあるというものがあります。真理値表で動作を確認してみましょう。

  • S=0, R=0 -> Q=保持, notQ=保持
  • S=1, R=0 -> Q=1, notQ=0
  • S=0, R=1 -> Q=0, notQ=1
  • S=1, R=1 -> Q=0(禁止), notQ=0(禁止)

真理値表上ではS=R=1の時Q=notQ=0となりますが、SR-Latch回路の作り方によっては発振という予期せぬクロックが発生したり、出力が一意に定まらない場合もあるため、基本的にはS=R=1の動作は禁止です。

上の画像の例だと、左側のSR-LatchはS=R=1の時にQ=notQ=0となりますが、右側のものはSとRのどちらの入力が早かったかによってQとnotQの状態が変わります。一応、この右側の作り方のSR-Latchは応用テクとして、どちらの入力が早かったかの検出に使うこともできます。

 

少し脱線しましたが、このため基本的な使い方としては、予めS=R=0の状態を保っておき、必要に応じてSかRに1を一瞬入力するのが主流です。

ちなみに、このLatch回路や入力の名前にもなっているSRはそれぞれ、Set(セット)Reset(リセット)の意味です。

またこのSR-LatchはRS-Latchとも表記されます(このRSは「レッドストーン」ではない)が、当ブログで「RS」は「レッドストーン」の意味で使っており、混同を避けるため今後当ブログではSR-Latchの表記で統一します。

 

D-Latch回路

f:id:YukimiD1999:20210211182750p:plain

D-Latch回路の一例
  • 入力:
    ・空色コンクリ :D
    ・青コンクリ  :C
  • 出力:
    ・ピンクコンクリ:Q

D-Latch回路2入力のLatch回路で、C入力が1ならばその前の出力を保持し、C入力が0になるとD入力によってセット・リセットの動作をします。真理値表で動作を確認してみましょう。

 

(上画像の左側のD-Latchの場合)

  • C=0, D=0 -> Q=0(リセット)
  • C=0, D=1 -> Q=1(セット)
  • C=1, D=0 -> Q=前の状態のQを保持
  • C=1, D=1 -> Q=前の状態のQを保持

 

(上画像の右側のD-Latchの場合)

  • C=-, D=X -> Q=前の状態のQを保持
  • C=↑, D=0 -> Q=0(リセット)
  • C=↑, D=1 -> Q=1(セット)

※「↑」は、入力が0から1になった瞬間を意味する

※「-」は、入力が0から1になった瞬間以外の状態を意味する

※「X」は、0と1のどちらでも良いことを意味する

 

左側のD-Latchの方が簡単な形をしています。このD-Latchは先にDを入力しておいてからCを入力すると、Cが入力されている間はDの入力を保持し続けます。

一方右側のD-Latchは動作がやや複雑です。このD-Latchは先にDを入力しておいてからCを入力すると、もう一度Cが入力されるまでDの入力を保持し続けます。なおもう一度Cが入力されると、その時点でのDの入力を新たに保持します。

今回のパスワードドアにはD-Latch回路を使用しないので深く覚える必要はあまりありません。応用例として右側のD-Latchは、C入力にクロック回路を接続すればクロック毎にD入力を保持するレジスタとして使えます。

ちなみに、このLatch回路や入力の名前にもなっているCDはそれぞれ、Clock(クロック)またはControl(コントロールと、Data(データ)またはDelay(ディレイ)の意味です。

 

T-Latch回路

f:id:YukimiD1999:20210211190941p:plain

T-Latch回路の一例
  • 入力:
    ・空色コンクリ :T
  • 出力:
    ・ピンクコンクリ:Q

T-Latch回路入力のLatch回路で、T入力が0ならばその前の出力を保持し、T入力が1になると保持していた出力を反転させます。真理値表で動作を確認してみましょう。

  • T=0, 前の状態のQ=0 -> Q=0(前の状態のQを保持)
  • T=0, 前の状態のQ=1 -> Q=1(前の状態のQを保持)
  • T=1, 前の状態のQ=0 -> Q=1(前の状態のQを反転)
  • T=1, 前の状態のQ=1 -> Q=0(前の状態のQを反転)

  

今回はどちらの形のT-Latchも同じ動作をします。このT-Latchの動作は単純で、T=0の時は以前のQを保持、T=1の時は以前のQを反転するだけです。

 

この回路は結構簡単な動作をする上に、簡単な応用法が多くあるので覚えておくと良いでしょう。イメージとしては、スイッチを押す度に電源のON/OFFができる電子機器が近いと思います。

ちなみに、このLatch回路や入力の名前にもなっているTは、Toggle(トグル)の意味です。押す度にON/OFFが切り替えられるスイッチを「トグルスイッチ」と言ったりしますよね。その「トグル」です。

 

JK-Latch回路

f:id:YukimiD1999:20210211193422p:plain

JK-Latch回路の一例
  • 入力:
    ・空色コンクリ  :J
    ・青コンクリ   :K
    ・オレンジコンクリ:C
  • 出力:
    ・ピンクコンクリ:Q

JK-Latch回路3入力のLatch回路で、C入力が0ならばその前の出力を保持し、C入力が1になった時、JとKの状態によって出力が変わります。真理値表で動作を確認してみましょう。

  • C=↑, J=0, K=0 -> Q=前の状態のQを保持
  • C=↑, J=1, K=0 -> Q=1(セット)
  • C=↑, J=0, K=1 -> Q=0(リセット)
  • C=↑, J=1, K=1 -> Q=前の状態のQを反転
  • C=-, J=X, K=X -> Q=前の状態のQを保持

※「↑」は、入力が0から1になった瞬間を意味する

※「-」は、入力が0から1になった瞬間以外の状態を意味する

※「X」は、0と1のどちらでも良いことを意味する

 

このJK-Latchは先にJとKを入力しておいてからCを入力すると、JとKの状態によってその挙動が変わります。それ以外の時はその時の出力を保持します。

真理値表だけを見ると少し混乱しますが、このJK-Latch回路はD-Latch回路の特性を持ちつつも、SR-Latch回路とT-Latch回路の動作をさせられる回路であると言えば、少し理解がしやすいと思います。

 

まず、JとKが異なる場合にC入力があると、SR-Latch回路として動作します。J入力が1の場合J入力がSR-Latch回路で言うところのS入力として、K入力が1の場合K入力がSR-Latch回路で言うところのR入力として動作します。

続いてJ=K=1の場合にC入力があると、今度はT-Latch回路として動作します。つまり、J=K=1である限りC入力がT-Latch回路で言うところのT入力として動作します。

最後にJ=K=0の場合Cが入力された瞬間以外は、単純にその前の状態のQを保持します。Cが入力された瞬間だけ動作するのは、D-Latch回路の例での右側のタイプのD-Latchと似ていますね。

 

今回のパスワードドアにはJK-Latch回路を使用しないので深く覚える必要はあまりありませんが、この回路が万能Latch(FlipFlop)回路と呼ばれていることを覚えておけば、このJK-Latch回路の動作を覚えておきやすいと思います。

ちなみに、このLatch回路や入力の名前にもなっているJKに関しては、明確にこれといった由来が不明で諸説あるようです。気になったら調べてみて下さい。まあ当然ですが、女子高校生の略ではありません。

 

Latch回路をパスワードドアに搭載してみよう

さてここからが本題です。Latch回路を使ってパスワードドアに以下の機能を追加してみます。

  • 入力を内側からリセットできる機能
  • 内側からドアを開ける機能

まず入力をリセットできる機能ですが、これはつまり外側からは入力を「セット」し、内側からは入力を「リセット」できる機能と言い換えることができます。

一方の入力は「セット」し、もう一方の入力は「リセット」できる上に入力を保持しておける回路…Latch回路の1つにそんなものがありましたよね?

 

そう、今回使うのはSR-Latch回路です。

f:id:YukimiD1999:20210212035743p:plain

[画像A5-1] 画像A2の状態から「レバー」を「ボタンとSR-Latch回路」にした

f:id:YukimiD1999:20210212035930p:plain

[画像A5-2] 画像A5-1を横から見たところ

[画像A5-1]で言うところの下のボタンがSR-Latch回路のS入力、上のボタンがR入力となっています。

このままだとR入力をSR-Latchそれぞれに対して一々入力する必要があるので、R入力側は1つの入力にまとめてしまいましょう。

f:id:YukimiD1999:20210212043257p:plain

[画像A6-1] 画像A5-1の状態からR入力をひとまとめにした

空色コンクリ部分は内側にある入力ボタンとして下さい。そうすることで内側から入力をリセットできます。さらに、入力がリセットされるので開いていたドアも自動的に閉まり、再び鍵がかけられるというわけです。

 

かなりそれっぽくなってきましたが、もう1つの機能を忘れてはなりません。内側からドアを開ける機能です。

今このパスワードドア回路は、内側からリセットして鍵をかけると内側からドアを開けられません。なぜなら、ドアを開けるための入力がNOR回路の出力しかないからです。

それならば、内側のボタンとNOR回路の出力をOR回路でまとめ、それをドアに入力すればいいということです。

f:id:YukimiD1999:20210212044606p:plain

[画像A6-2] 画像A6-1の状態から内側からドアを開けるボタンを追加した

青コンクリの部分が追加部分です。青コンクリの出力NOR回路の出力OR回路に入力したことで、青コンクリNOR回路いずれか一方でも1であれば1を出力する、つまりドアが開くようになりました。

 

これで2つの機能を追加できました。このように「何をしたいのか」を細かく分解して考えていけば、こんなに凄い回路を作成できるのです。

 

もっと機能を追加しよう!

さて、なかなかパスワードドアらしい感じになってきましたが、ここで新たな問題が発生しました。外側から入力していて間違えてしまった時、入力をリセットする手段がないのです。

人間誰しも間違いはあるものですが、現在このパスワードドアは一切の間違いを許さず、間違えたら二度と内側に入れないドアになっています。それはちょっと困りますよね。

つまり、以下の機能が欲しいわけです。

  • 入力を外側からリセットできる機能

では、この機能を実現するにはどうすれば良いでしょうか?考えてみましょう!

 

それでは答え合わせです。

f:id:YukimiD1999:20210212045828p:plain

[画像A7-1] 画像A6-2の状態から入力を外側からリセットできるボタンを追加した

内側のリセット入力と新しく設けた外側のリセット入力OR回路でまとめ、R入力に入れるだけでした。ちなみに、増設されたRSリピーターには整流子(ダイオードとしての役割を与えていますが、今回は特に考慮しなくて大丈夫です。

 

これで外側から入力した時に間違えても大丈夫なようになりました。さて、次はどんな機能があったらいいでしょうか?

内側からドアを一度開けたら自動で鍵がかかるとかはどうでしょうか。要は外に出たら自動で鍵がかかるということです。いわゆるオートロックってやつですね。

つまり、以下の機能が欲しいわけです。

  • 内側からドアを開けたらリセットできる機能

これを実現するにはどうすればいいでしょうか?また考えてみましょう!

 

それでは答え合わせです。

f:id:YukimiD1999:20210212050955p:plain

[画像A7-2] 画像A7-1の状態から「内側からドアを開ける入力」をR入力にも繋いだ

SR-LatchのR入力に対し、内側からリセットする入力外側からリセットする入力内側からドアを開ける入力3入力のOR回路の出力を与えるようにしました。結構単純でしたね。

 

これで中々いい感じのパスワードドアができました。機能が結構増えてきたのでここでちょっと入力・出力・論理ゲート・Latch回路を整理しましょう。

f:id:YukimiD1999:20210212054651p:plain

[画像A8-1] 画像A7-2の状態から色分けし直した

f:id:YukimiD1999:20210212054757p:plain

[画像A8-2] 画像A8-1を左横から見た図

f:id:YukimiD1999:20210212054838p:plain

[画像A8-3] 画像A8-1を右横から見た図
  • 入力:
    ・金・鉄ブロック  :左から入力A, B, C, D、内A, Bが正解
    ・オレンジコンクリ :外側からのリセット入力R1
    ・空色コンクリ   :内側からのリセット入力R2
    ・青コンクリ    :内側からドアを開ける入力R3
    ・ピンクコンクリ  :Q3をR入力とするSR-Latch回路の入力RA, RB, RC, RD
  • 出力:
    ・RSブロック    :左からA, B, C, DをそれぞれS入力とするSR-Latch回路の出力QA, QB, QC, QD(の状態)
    ・金ブロック    :QA, QBをそれぞれ入力とするNOT回路の出力QA', QB’
    ・エメラルドブロック:QA', QB', QC, QDを入力とするNOR回路の出力Q1
    ・エメラルドブロック:Q1, R3を入力とするOR回路の出力Q2
    ・ピンクコンクリ  :R1, R2, R3を入力とするOR回路の出力Q3
  • 論理ゲート:
    ・赤紫コンクリ   :QA', QB', QC, QDを入力とするNOR回路
    ・エメラルドブロック:Q1, R3を入力とするOR回路
    ・ピンクコンクリ  :R1, R2, R3を入力とするOR回路
  • Latch回路:
    ・RSブロック    :A, B, C, DをそれぞれS入力、RA, RB, RC, RDをそれぞれR入力とするSR-Latch回路

 

整理してみると、このパスワードドア回路は以下の条件で動作することがわかります。

  • ドアを開ける条件:
    「AとBを入力し、かつCとDを入力しない」または「R3を入力する」
  • 鍵をかける(リセットする)条件:
    「R1を入力する」または「R2を入力する」または「R3を入力する」

 

このパスワードドア回路を1から作ろうと思った場合には、前回及び今回の様に少しずつ改良を加えていくのも良いですが、上の様に動作条件を「~かつ○○」と「~または○○」の形に書き出せば、最初から[画像A8-1~3]の形でパスワードドア回路を作ることもできてしまいます。

動作条件を「~かつ○○」と「~または○○」の形に書き出すの点に関しては、この先ゲーム制作に限らず様々な場面で役立つ考え方だと思いますので、ここで慣れておくと良いと思います。

 

もっともっと機能を追加しよう!

ここまでやればかなり立派なパスワードドアになったと思いますが、もう少しだけ機能を追加してみましょう。

現在、ボタンを押し間違えた時はリセットボタンを押すことでやり直せますが、押し間違えたボタンをもう一度押したら、そのボタンの入力だけがリセットされると便利に思えませんか?

つまり、以下の機能が欲しいわけです。

  • それぞれのボタンが入力される度に、そのボタン入力だけがセット・リセットされる機能

では、この機能を実現するにはどうすれば良いでしょうか?今回は一緒に考えてみましょう!

 

まず、入力の度に出力が反転する回路についてですが、その特徴を持った回路はT-Latch回路でしたね。つまり、現在SR-Latch回路になっている部分をT-Latch回路に置き換えれば良さそうです。

これでそれぞれのボタンが入力される度に、そのボタン入力だけがセット・リセットされる機能そのものは実現できますが、[画像A8-1~3]で言うところのR1, R2, R3入力でA, B, C, D入力をリセットする機能が失われてしまいます。T-Latch回路は入力がある度に出力を反転するだけなので、単純にR1~3入力をするだけではダメなのです。

 

では、どうすればいいのでしょうか。ここで現在の悩みの種を整理してみましょう。

  • 入力がある度に出力を反転させたいのでT-Latch回路を使いたい
  • しかし、T-Latch回路に対して単純に入力するだけでは、全ての出力を0の状態にできない場合がある

 

問題なのは4つのT-Latch回路に対して、どのように入力すれば全てのT-Latch回路出力を0にできるか、ということです。 

 

この問題の解決にもT-Latch回路の性質が少し使えそうです。繰り返しになりますが、T-Latch回路は入力があれば出力を反転します。つまり、現在の出力が1になっているT-Latch回路に対してのみリセット入力をすれば、全ての出力を0にできそうです。

 

ではここで、実現したい動作の真理値表を書いてみましょう。入力・出力は以下の様に表記します。

  • T-Latch回路の出力                :QA
  • T-Latch回路をリセットする入力          :RA
  • リセット入力でT-Latch回路の出力が変化するかどうか:QA'

 

それでは真理値表を書いてみましょう。

  • QA=0, RA=0 -> QA'=0
  • QA=1, RA=0 -> QA'=0
  • QA=0, RA=1 -> QA'=0
  • QA=1, RA=1 -> QA'=1

※QA'=0でQAに変化無、QA'=1でQAに変化有を表す

 

ふむふむ、なんだか見覚えのある真理値表になりましたね。さて、何の論理ゲートの真理値表と同じでしょうか?「なんだっけ?」という方は前回(初級編)に戻って論理ゲートの解説を見返してみて下さい。

 

正解はAND回路でした。QA=1かつRA=1の場合のみQA'=1になっていますよね。よって、出力が1になっているT-Latch回路だけ出力を0にするには、T-Latch回路の出力リセット入力AND回路の入力にし、AND回路の出力をT-Latch回路の入力に繋げばいいわけです。

 

それでは答え合わせ…と行きたいのですが、その前に今回用いるT-Latch回路を軽く紹介させて下さい。

f:id:YukimiD1999:20210212080825p:plain

[画像B1-1] 今回使うT-Latch回路

f:id:YukimiD1999:20210212080857p:plain

[画像B1-2] 画像B1-1のT-Latch回路を別角度から

今回使うT-Latch回路はドロッパー輸送とRSコンパレーターを利用したタイプのもので、アイテムを1個、いずれかのドロッパーに入れるだけで動作します。

パッと見だけではどうなってるかわかりづらいので、作成途中の画像を交えて構造を説明します。

f:id:YukimiD1999:20210212080950p:plain

[画像B2-1] まずはRSコンパレーターとリピーターで出力部を作り、
RSコンパレーターのメイン入力に対して
90度向きを変えてドロッパーAを設置

f:id:YukimiD1999:20210212081116p:plain

[画像B2-2] ドロッパーAの前に90度向きを変えてドロッパーBを設置

f:id:YukimiD1999:20210212081219p:plain

[画像B2-3] さらにドロッパーBの前に90度向きを変えてドロッパーCを設置

f:id:YukimiD1999:20210212081253p:plain

[画像B2-4] ドロッパーCの前に、ドロッパーAに接続する形でホッパーを設置

f:id:YukimiD1999:20210212081346p:plain

[画像B2-5] ドロッパーBの上にRSワイヤーを設置、ここにT入力をする。
RSワイヤーをドロッパーA, Cの上に伸ばしたい場合は、
画像の様にドロッパーA, Cの上にガラス等の透過ブロックを設置し、
さらにその上にRSワイヤーを設置すると良い

T入力はRSワイヤーに対して入力します。アイテムを1個だけ入れるのをお忘れなく。

 

それではようやく、それぞれのボタンが入力される度に、そのボタン入力だけがセット・リセットされる機能を持たせたパスワードドア回路の答え合わせです。

f:id:YukimiD1999:20210212081923p:plain

[画像A9-1] T-Latchを組み込んだパスワードドア回路

f:id:YukimiD1999:20210212082011p:plain

[画像A9-2] 画像A9-1を入力側の横から見た図

f:id:YukimiD1999:20210212082102p:plain

[画像A9-3] 画像A9-1を左横から見た図

f:id:YukimiD1999:20210212082134p:plain

[画像A9-4] 画像A9-1を右横から見た図

f:id:YukimiD1999:20210212082204p:plain

[画像A9-5] 画像A9-1を出力側の横から見た図

色分けは以下の様になっています。

  • 入力:
    ・金・鉄ブロック  :金が正解入力A, B、鉄が不正解入力C, D
    ・オレンジコンクリ :外側からの全リセット入力R1
    ・空色コンクリ   :内側からの全リセット入力R2
    ・青コンクリ    :内側からドアを開ける入力R3
    ・ピンクコンクリ  :Q3出力から分岐し、A, B, C, DそれぞれとのAND回路への入力RA, RB, RC, RD
  • 出力:
    ・ガラスブロック  :それぞれAとRA、BとRB、CとRC、DとRDを入力とするOR回路の出力RA', RB', RC', RD'
    ・黄色コンクリ   :それぞれRA', RB'を入力とするT-Latch回路の出力QA, QB
    ・白コンクリ    :それぞれRC', RD'を入力とするT-Latch回路の出力QC, QD
    ・ラピスブロック  :それぞれQA, QBを入力とするNOT回路の出力QA', QB'
    ・エメラルドブロック:QA', QB', QC, QDを入力とするNOR回路の出力Q1
    ・エメラルドブロック:Q1, R3を入力とするOR回路の出力Q2
    ・ピンクコンクリ  :R1, R2, R3を入力とするOR回路の出力Q3
  • 論理ゲート:
    ・赤紫コンクリ   :QA', QB', QC, QDを入力とするNOR回路
    ・エメラルドブロック:Q1, R3を入力とするOR回路
    ・ピンクコンクリ  :R1, R2, R3を入力とするOR回路
    ・ガラスブロック  :それぞれAとRA、BとRB、CとRC、DとRDを入力とするOR回路
    ダイヤブロック  :それぞれQAとRA、QBとRB、QCとRC、QDとRDを入力とするAND回路
  • Latch回路:
    ・T-Latch回路     :それぞれRA', RB', RC', RD'をT入力とするT-Latch回路

 

入力やら出力やらの記号が増えて頭がこんがらがるかもしれませんが、一つ一つ丁寧に整理すると、この回路の動作条件は以下の様になります。

  • ドアを開ける条件:
    「AとBの入力が1であり、かつCとDの入力が0である」または「R3を入力する」
  • 鍵をかける(全てリセットする)条件:
    「R1を入力する」または「R2を入力する」または「R3を入力する」
  • A~Dのボタン入力結果が1から0になる条件:
    「鍵をかける条件を満たす」または「そのボタンをもう一度入力する」

 

[画像A8-1~3]の時(A~D入力をSR-LatchのS入力に繋いでいた時)と比べると、A~Dのボタン入力結果が1から0になる条件を満たした時の動作が増えただけになったので、見事それぞれのボタンが入力される度に、そのボタン入力だけがセット・リセットされる機能を持たせることに成功しました。

 

動作条件を「~かつ○○」と「~または○○」の形に書き出す以外の回路構築法としては、今回のように「改善したい問題・追加したい機能」を考え、「それを実行するための簡単な仕組み」を書き出し、「その仕組みに合った動作をする回路」を考える、というものがあります。

これは近年叫ばれているプログラミング的思考というヤツの一部です。動作条件を「~かつ○○」と「~または○○」の形に書き出すというのもプログラミング的思考の一部だったりします。

要は「問題を発見」し、「問題解決のための仕組み」を「論理で筋道を立てて」考え作成・実行するのです。ある意味、マイクラのRS回路はこのプログラミング的思考を鍛えるのにはピッタリです。

 

論理立てて物事を考えるには「なぜそうなるのか」がわからないといけません。常に様々な物事に対して「なぜそうなるのか」を考えるのは、マイクラ内に限らず人生において様々なことに役立つはずです。

イクラで鍛えたプログラミング的思考力はぜひ、日々の生活や社会における問題解決に役立ててみて下さい。

 

多少話が脱線しましたが、今回はここまでです。前回と比べて難易度が跳ね上がりましたが、この記事を見ながら自分で実際に作ったり考えたりすれば、きっと理解が少しずつでも深まっていくはずです。ぜひとも色々な機能を追加するチャレンジをしてみて下さい!

 

次回はさらに高度な動作をするパスワードドア回路を作っていきます。正解のボタンをただ押すだけでなく、それを特定の順番で押すことでしか開かないパスワードドアを作ってしまいます。

次回はさらに難易度が上がりますが、次回の内容までできるようになればゲーム制作の幅が大きく広がります!次回もぜひ見て下さい!

次回リンク ↓

 

今回のまとめ

  • Latch回路は1ビットの情報を保持できる回路!
  • Latch回路を使えばより高度な動作をする回路を作れるようになる!
  • Latch回路の動作原理も真理値表を書くと理解しやすい!
  • 問題の解決や機能の追加をする時には、動作条件を整理して簡単な仕組みに書き直し、その動作にあった回路を考えるべし!
  •  ↑ の思考法はプログラミング的思考の一部!
  • プログラミング的思考は、マイクラでも日常生活でもとっても大事!ぜひともマスターしよう!

 

関連記事

  • コマンド解説-応用編その4:パスワードドアを作ってみよう!超級編-
  • コマンド解説-応用編その5:ゲームタイマーを作ってみよう!-
  • コマンド解説-応用編その6:ゲーム演出を作ってみよう!初級編-
  • コマンド解説-応用編その7:ゲーム演出を作ってみよう!中級編-
  • コマンド解説-応用編その8:ゲーム演出を作ってみよう!上級編-
  • コマンド解説-応用編その9:謎解きゲームを作ってみよう!初級編-
  • コマンド解説-応用編その10:謎解きゲームを作ってみよう!中級編-
  • コマンド解説-応用編その11:謎解きゲームを作ってみよう!上級編-
  • コマンド解説-応用編その12:スコア稼ぎゲームを作ってみよう!-
  • コマンド解説-応用編その13:特殊アイテムを作ってみよう!初級編-
  • コマンド解説-応用編その14:特殊アイテムを作ってみよう!中級編-
  • コマンド解説-応用編その15:特殊アイテムを作ってみよう!上級編-

 ※解説ページができ次第リンクさせます

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。