海底神殿の解体をプログラムしてみた スクラッチ × マインクラフト 特別編

マインクラフト屈指の作業量を誇る海底神殿の水抜き&解体。
それをスクラッチでやってしまおうという回です。
自分自身も今までにサバイバルで水抜きはやりました。
まず神殿外部を砂で囲って内側を4×4程度で区切りながらスポンジで水を抜き、神殿内部をスポンジで水を抜く方法です。
が、かなり時間がかかりました。
ラクな作業方法はなく、単純作業が地道に延々と続きます。
しかも水抜き後の探索で地面の下に廃坑があったので現状保存ということで解体はせずに置いてある状態です。

さてスクラッチで実行する場合ですがまずは何をするかを考えましょう
プログラミングや普段の生活でも行うことですが実際に何か作業をする場合は

  • 作業工程を確認する。
  • 手順を確認する。
  • 考えられるエラーを事前に対処する。
  • 効率の良い方法を探す

等、いろいろなことを考えると思います。

通常は、水を抜いてから神殿を解体する流れなのですが、スクラッチでは海底神殿を傷つけず水のみを抜くことはほぼ不可能です。
できたとしてもものすごく面倒です。
しかし、逆に水を抜かない海底神殿を解体することは可能です。
その後に水を抜くことも可能です。
今回は水抜きと解体を同時に行います。
ということで、どうするか?


プラン1 – 埋めて消す

水抜き対象範囲、神殿を含むすべてを何かのブロック(砂や土など)で埋め尽くしblockTypeId0の透明ブロックで上書きする。
今までのプログラミングの基本の経験だけでできます。
たったの2工程です。
しかし結構、時間がかかります。


プラン2 – スポンジで水抜き

壁で囲った後に神殿をblockTypeId0で上書きして神殿を消去。
その後ある程度の等間隔でスポンジを設置して水を抜く。
こちらのほうが時間はかかりません。
スポンジの性質がわかっていれば断然こちらのほうが早いです。
しかし、100%は抜けません。
壁面や底に多少残ると思います。
99.8%くらいは抜けます。


プラン3 – TNTで爆破

爆発耐性のあるもので壁を作り、無理やり等間隔にスポンジを設置して水を抜いてその後、スポンジと同じ座標にTNTを設置して着火、海底神殿を爆破解体する。
やめましょう。
面白いですがやめましょう。
大惨事になります。
TNT約4,000個は伊達じゃないです。
マインクラフトも数秒止まりました。
3マス間隔で設置したので多かったようです。
全部置き換えたので多すぎましたね。
1個置き(5マス間隔)でもいいでしょう。
スポンジもよく見ると水を含んでいないスポンジが大量にあります。
しかしこのTNT爆破解体、所要時間はおそらく最速です。
手直し等入れてもうまくやれば30分程度でできるかもしれません。
底にも爆発耐性のあるものを敷き詰めれば被害は最小限にできるでしょう。

約4,000個のTNTに置き換えているところ
爆破後の海底神殿跡

ということで、今回はプラン1で解説します。
まずは外周を囲みます。過去にサバイバルでやった時もそうなんですが最終的にガラスで囲ったので最初からガラスで囲います。海底神殿を見つけたら4隅のX,Z座標を確認しましょう。
それから神殿の一番下のY座標も確認しましょう。

海底神殿の座標例

座標を確認したら2つ3つ外側に壁を作るようにしましょう。
上の図では黄色の部分を壁に設定しています。
海底神殿はかなり広いので埋めるだけでも時間がかかります。
まわりの壁は繰り返す命令を2つ組み合わせて設置します。
その際に気を付ける点はY座標だけです。
スポーン地点の座標にもよりますが、たいていはmcpiYのスタート座標はマイナス指定になります。0,63,0に指定した場合は-31前後の指定になると思います。
スクラッチの画面内のステージに変数のビューワを表示させている場合はスライダーの最小値を-62程度にしておけば数値の変化も目視できるので設定しておきましょう。
積み上げる回数の指定ですが~まで繰り返すを使い、(mcpiY=0)まで繰り返すのようにするとちょうど海上まで積み上げることができると思います。
先に横に並べて積み上げていくのも良し、積み上げて横にずらしていってもどちらでもよいでしょう。
上から下に向かって設置する場合は砂や砂利等落下するものを設置しないように気を付けましょう。

ここで一つポイント
今までは設置する座標と設定する座標の関係でsetblockの後に0.1秒待つのようにウェイトタイムを設定していました。
しかし、今回のプログラムは設置する数が膨大です。
壁だけでも60×31×4+31×4=7,564
内部は60×31×60=111,600
さらに内部はもう一度繰り返すので111,600
合計で230,764回設置作業をしなければならないのです。
0.1秒の待ち時間を設定すると1分で432個前後、設置できます。
終了予想時間は534分……
待ち時間を0.0001秒にすると1,184個。
実は0秒でもできます、0秒にすると1,171個です。
あっ、減りましたね。
それにしても194分かかります。
ということで、いっそのこと待ち時間なし(~秒待つのブロックを使わない)で試してみました。
すると…
2,364個です!
予想時間は97分です。
計測方法はスクラッチ内のタイマーを利用して60になるまでにどの程度座標が移動するか確認しました。
実際に試してみる場合は待ち時間設定は、なしにすることをお薦めします。
そのさいには設置開始座標が1つずれるので開始座標を調整しましょう。
個数は参考例です。
パソコンの性能や状態により変わります。
実際には2時間程度かかりました。

まずは壁で囲みましょう。

壁で囲んだら次は中を埋めます。
座標に気を付けましょう。
立方体で埋めるので繰り返しの命令を3つ組み合わせる必要があります。

左が砂で埋めるプログラム。
右が砂を消すプログラムです。
よく見ると右のプログラムはY座標の変更をしていません。
下から消す場合砂は落ちてくるのでY座標は変更する必要はないのです。
上記と同じプログラムを組んだ場合、落ちてくる砂を見てると酔うかもしれませんので十分気を付けてください。

水抜き&解体完了

海底神殿の水抜きと解体はクリエイティブでも時間がかかります。
スクラッチ等のプログラミングを使うことによってかなり時間は短縮されます。
プログラムさえ組めてしませば1日に何か所でも水抜き&解体はできます。

おまけ

海底神殿解体、水抜きなし
TNTで爆破×2回やった後

コメント