okayurisotto.net

私が好きでやったことが他の人のためにもなったらお得かも!

【Minecraft】できるだけエンダーアイを節約しつつ要塞を見付けてみる

はじめに

Minecraftというゲームではランダムに生成される広大な世界を開拓していく過程を楽しみます。そしてその世界にもいくつか種類があって、それぞれの世界に特徴的な構造物や地形やアイテムがあり、ゲームに奥行きを与えています。

オーバーワールドというプレーンな世界に生成される構造物であるエンド要塞には、エンドという異なる世界へ通じているポータルがあります。エンドにはオーバーワールドにない魅力的な資源があるため、エンドへ行くこと、そのためにオーバーワールドでエンド要塞を見付けることは開拓における大きなイベントです。

しかしオーバーワールドは広大で、運まかせではいくら探索してもエンド要塞を見付けることはほぼ不可能です。そこで使われるのが、エンド要塞を見つけるためだけの使い捨てアイテム、エンダーアイです。エンダーアイを使用すると、使用されたエンダーアイは最寄りのエンド要塞の方向へ飛んでいきます。このエンダーアイを使いながら徐々にエンド要塞へと近付いていく、というのが正攻法な攻略です。しかしこのエンダーアイは使い捨てアイテムであり、そして作成コストも小さくありません。より少ないエンダーアイでエンド要塞の位置を特定することができたらうれしいところです。

世界におけるエンダーアイの軌跡

使用されたエンダーアイは最寄りのエンド要塞の方向へと真っ直ぐに飛んでいきます。この軌跡は、オーバーワールドを上から見下ろしたとき、使用した地点とエンド要塞とを通る直線として表されます。「エンダーアイの使用によって得られたエンド要塞の方向へいくらか移動した上でまたエンダーアイを使用する行為」は、同一のエンド要塞を通る直線をもう1つ引いてみることと同義です。複数の直線が与えられたとき、その交点にはエンド要塞があります。

Minecraftではデバッグ情報として現在地の座標や向いている方向の情報が得られます。そのため、エンダーアイの軌跡の直線の方程式が得られます。方程式さえ得られれば、その交点を求めることは難しいことではありません。

実際には観測点は2点だけでなく、それ以上になることがあります。観測には誤差があるため、最終的な交点の座標としては平均値を使うことになるでしょう。

おわりに

ここでは平面かつピッチだけを扱いましたが、Minecraftの世界は立体で、ピッチだけでなくヨーについてもあります。エンド要塞を見つけるときには使いませんが、これらを扱うことのできるプログラムを書いておくと便利です。三角測量というやつですね。