プログラミングの備忘録

プログラムをつくる過程を残すもの

shapez で全自動工場をつくる

こんにちは。
今回は、shapez で全自動工場をつくってみます。


前回、shapez の紹介を行いました。

taq.hatenadiary.jp

いきなりですがレベル26まではすっ飛ばして、それ以降のフリープレイモードについての記事になります。


レベル26までやってきた方であれば、shapez の操作に慣れてきたことと思います。
そして同時に、その面白さを知っていただけたのではないでしょうか。
ここからももっと面白くなってきます。


注意: shapez の面白さは工場をどうするか考えるところにありますので、本記事はネタバレになります。


目次


はじめに

これから全自動工場をつくっていくわけですが、割と規模が大きなものになりますので、設計図のようなものがあると良いと思います。
なんとなくでもこんな配置にして、各工程はこんな形で、など。

遠くにつくって、後で近くに移転させてもいいかもしれません。
レベル12で要求される CbCbCbRb:CwCwCwCw (ブループリント) はあって困ることはありませんので、たくさんつくっておきましょう。

そしてこれは一番大事なのですが、ここで書く方法が正解というわけではありません。
結局動けばいいんです。


全自動工場の流れ

  1. 素材を集める

  2. 必要な部品を取り出す

  3. 着色する

  4. 1層分を組み合わせる

  5. 積層させる

  6. 完成


参考までに、私の工場はこんな感じになっています。
行き当たりばったりでつくったのであまり洗練された感じではないですが…。

ちょっと間を詰めてみたら半分くらいになりました。


素材を集める

素材は工場の近場から集めます。
丸、四角、星は完全な形が既にありますので、コンベアが最高率になるように連鎖抽出機をつなげて取り出します。
おそらく16個/秒くらいになるようにすれば良いと思います。

扇については一部のみのものしかないので自分でつくる必要があります。
半分が扇由来の形となっているものを使うと良いです。
近くに無ければ4分の1のものでも十分な速さでつくることができるならば問題ありません。

仮想的にはこんな処理をすれば良いことになります。


色に関しても同様に集めましょう。
都度混色するよりも、事前に混色しておいていつでも使えるようにしておいた方が効率が良さそうです。


工場本体にはストレージを介してつなげておけば、使わないときは貯蔵に回せるので無駄が出にくいと思います。


必要な部品を取り出す

ここが肝です。回路を使います。

要求されている図形が1層のみの場合を説明します。
最終的には4層まで積層した図形を要求されますが、1層用の処理を4回繰り返せばいいです。


今、基本素材を全て集めたので、HUBから要求された図形に必要なものだけを取り出してきます。

Eキーを押すと、要求されている図形の情報の取り出し口がHUBの左下に見えます。

これを形状解析機につなげると、右上の色と形を読み取ってくれます。

この場合なら、白色の四角ということになります。

得られた情報と合致する素材が流れているコンベアから、アイテムフィルタを使って分岐させ、図形作成場に持っていきます。


具体的にはこのような配置になります。
1ヶ所あたりに必要な色・形は1つずつなので、分岐したコンベアはトンネルで縦一列に並ぶようにしておくとつくりやすいと思います。

これにより、四角のみが下に流れていくようになりました。

色についても同様に分岐させましょう。


1層あたり4ヶ所の色と形が必要になりますが、仮想回転機で1回回した後に仮想解析機に通せば、元の図形の左上の情報が得られます。
繰り返せば他の場所についても得ることができます。


着色する

続いて、色をつけていきます。


仮想解析機で得られる情報は右上の情報なので、使うのは4分の1個分で十分です。
そこで、切断機 (四分割) で切るという前処理を施します。 回転させて全て右上にくるようにしておけば、1個の素材から4個分得られます。


この配置を1単位として、4つつなげれば16個/秒の速さが出せると思います。
着色機 (ダブル) を使っていますが、通常の着色機でもコンベアをいっぱいにできれば問題ありません。


これを4ヶ所分行い、次の工程へ向かいます。


1層分を組み合わせる

着色の工程でできた4つの部品を積層機を使って1つにまとめます。


以下を1単位として8つつなげれば16個/秒は出せるでしょう。
部品は4つあるので対応する位置にくるように回転機で調整して3回繰り返す必要があります。


要求された図形が複数層から成る場合は、各層について同様に処理をして層の数の分だけ図形をつくっておきます。


積層させる

以降は、要求された図形が複数層から成る場合に必要です。
といってもやることは同じで、要求通りに重ねていけば良いです。


完成

積層が完了したら完成です。

実際に稼働させて、工場を一切いじることなくレベルをクリアできれば実績解除です。


しかし、実はまだ不十分で、フリープレイモードを進めるうちに工場が止まってしまうことがあるかと思います。
なぜかというと、一部が欠けたものや無色のものには対応していないからです。

そのような図形に対しては、形状解析機が $\phi$ を返してきますので、アイテムフィルタなどを使って工程を飛ばさせたりという工夫が必要です。


また、これはMAM (Make Anything Machine) とよばれる、不完全な全自動工場になっています。
具体的には、レベル20の RuCw--Cw:----Ru-- やレベル26の CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw のような単純に各層を積層するだけではつくることができない図形には対応していません。
(どうつくれば良いか苦戦しませんでしたか。)

このような図形に対しては、TMAM (True Make Anything Machine) とよばれる工場が必要になります。
処理が難しそうなので、機会があればまとめます。
が、フリープレイモードをやる上ではMAMで十分っぽいです。


納品方法

フリープレイモードでは図形の量ではなく速さで要求されます。
先程から何度か書いていますが、コンベア1本あたり16個/秒くらいが最大なので、工夫をしなければ高レベルの要求を満たすことができません。

ならば何本も使えば良いですね。
ある程度貯めておいて、HUBにある口の複数からに同時に納品すれば良いということになります。

ではどこに貯めるか。
ストレージに貯める手もありますが、上限が5000個と多いかつタイマーでも無い限り途中でシグナル変化が生じないということで、別の方法が良いでしょう。

薄々感じていたかもしれませんが、部品それぞれにも若干容量があります。
そして、なぜか知りませんが合流機 (コンパクト) と分流器 (コンパクト) で多いです。
というわけで、それらを組み合わせた簡易ストレージを準備し、そこがいっぱいになったら放流して一気に納品、という形にしてみます。

実際には、ストレージの性質を利用して貯まったことを検知します。
ストレージには出口が2つありますが、左側の星付きの口から優先して出されます。右側の口からは、左側の口からの出力が止まったときに出てきます。
なので、右側の口を簡易ストレージにつなげ、左側の口にはベルトリーダーとゴミ箱をつけておけば、左側が詰まって右側にアイテムが流れるようになったときにベルトリーダーが1を出力するので、それをきっかけとして簡易ストレージを開ければ良いことになります。

しかしこのままでは簡易ストレージが開いた瞬間に右側の流れが復活してしまい、ベルトリーダーからの信号が0に戻ってしまいます。

簡易ストレージの出口側にもベルトリーダーをつけておき、両方の信号をORゲートを介してアイテムフィルタにつなげておけば、簡易ストレージの入り口側か出口側どちらかのベルトリーダーが1を出力している間は出し続ける、ということができるので、貯まったアイテムを全て出してから閉じるようにできます。

HUBの12口を使って、150個/秒くらいにはなりました。


効率化

速さに関しては (1レーンのみで運ぶ場合) 16個/秒くらいが最速かと思いますが、あるレベルをクリアして次のレベルに移ってから図形ができあがるまでの時間も短くしたいところです。

簡単なのは要らない素材を捨てることでしょう。


捨てるようにする前の速さを測れていないので比較できませんが、なんとなく捨てるようにしてみたところ、レベルクリアから次の図形が到着するまでにだいたい2分半くらいかかりました。
多分もっと速くできると思います。

この動画では1分と少しくらいで来ているように見えますね (2:59:00~)。

[アーカイブ]shapez世界一が全自動工場(MAM)を造る配信 - YouTube


まとめ

以上、shapez の全自動工場をつくってみました。
とりあえず動くので記事を書いてみようと今に至りますが、これからもっと洗練された形にしていければと思っています。

それでは、良い shapez ライフを。また次回。