shapezで自動工場(MAM)を作ろう ストレージ編
本記事ではshapezで作った全自動工場(MAM)のうち、ストレージ部分を紹介します。
概要は以下の記事を御覧ください。
ストレージの概要
ストレージはHUBへの図形の供給量を制御するモジュールです。ステージクリアのためには図形の供給速度が一定以上になる必要がありますが、図形製造のスピードだけで追いつこうとすると工場がとんでもなく巨大になってしまいます。そこでストレージが役に立ちます。一定時間図形を貯めておき、貯まったら一気に放出することで供給速度を達成します。
入力と出力はどちらもお題の図形です。
詳細
全体像はこのようになっています。
このモジュールは更に細分化すると、2つのストレージ部(Storage)とフリップフロップ回路(FF)、1bitカウンタ(Counter)、タイマー(Timer)、レベル変化検知器(Pulser)に分けることができます。
レベル変化検知器(Pulser)
レベル変化検知器は、レベルの変化を監視し、レベルが上がったらパルス信号を出力します。
shapezの回路素子には若干の遅延があります。この遅延を利用し、上のパスと下のパスの図形が食い違ったときのみ出力が1になります。
フリップフロップ(FF)
フリップフロップ回路です。通常の論理回路でも登場するこの回路は2つの入力を持ち、最後にどちらの入力が1になったかどうかを記憶しておくことができます。
ストレージ部が貯蔵フェーズなのか、放出フェーズなのかを管理します。
OR回路2つとNOT回路2つで簡単に作れます。
1bitカウンタ(Counter)
カウンタ回路です。1bitなので入力が1になるたびに出力がひっくり返ります。2つあるストレージのどちらを貯蔵に用いるかを管理します。
タイマー(Timer)
入力が1になったら一定時間だけ出力を1にする回路です。内部にフリップフロップを持ち、コンベアを素材が流れている間だけ出力が1になります。
これは図形の切替時に発生するゴミを除去する、クリーンナップ時間を設けるために使っています。
ストレージ部(Storage)
作った図形を貯蔵する部分です。ストレージという部品を使います。入力として入口と出口それぞれを塞ぐか開けるかどうかのフラグを持ち、ストレージが満杯になったかどうかの出力があります。
ストレージは5000個でいっぱいになり、1つのストレージには出力が2つあります。必要な供給速度の最大は200item/sで、コンベアの最大速度が1つあたりだいたい20item/sなので、ストレージが5つあれば全てのステージをクリアできることになります。とはいえストレージが多いと時間もかかるので、使うストレージの数を調整できるボタンもつけています。
1つのストレージには1種類の図形しか貯蔵できず、放出にも時間がかかるので2つのストレージを交互に使って貯蔵と放出を行うようにしています。
各モジュールの制御
このモジュールは3bit分の記憶力があるので、取りうる状態は8個です。タイマーがONになるのは貯蔵フェーズのときだけなので、使う状態数は6になります。
以下のようなステートマシンになっています。
これを組み合わせると以下の実装になります。
やはりデジタル回路による制御は最高ですね。このあたりはMinecraftのレッドストーン回路と似たようなものを感じます。
今回の実装の欠点は貯まるまでに時間がかかるということです。他の人は貯蔵に分岐部品を使っていたりしました。そっちのほうが良さそうです。