Chaos Corp.のまったりゲーム生活

主に音ゲーやマイクラのことについてのんびり記事を書いていきます。

要塞の座標をおおまかに測量できるプログラム作ってみた。

どうもこんにちは。fです。
今回はVBSで、要塞の座標を測量できるプログラムを作りました。
ソースコードも配布します。
実はソースコード書いたのは小学校のときだったのですが、諸事情があって使えないと勘違いし、放置していましたww
まず最初に、アイテムなどの名称に関する簡単な説明を。(この題名なので見てる人は多分知ってると思いますが、一応)
題名の通り、このプログラムの目的は、マイクラのワールド内に複数存在する「要塞」という地下建造物を探し出すことです。
因みに、要塞はjava版では1ワールドにつき128個生成されるはずです...(うろ覚え)
どうやって探すかというと、「エンダーアイ」という、「ブレイズロッド」と「エンダーパール」を合成して作れるアイテムを使います。
ですが、エンダーアイは「エンドポータル」(要塞の中にある、「エンド」というディメンションにいくための装置)を起動したり、アイテムがワールドで共有される「エンダーチェスト」を作るのにも使います。
とにかく、節約したいんですよ。はい。
それで、普通ならエンダーアイを投げまくってだんだん要塞に近づいていくのですが、エンダーアイは投げると1回につき20%の確率で壊れてしまうので、この方法だとエンダーアイを多く消費してしまいます。
そこで使うのが、今回紹介するプログラムです。
当たり前と言えばそうですが、このプログラムは私の自作です。
仕組みとしては、一次式のグラフ2つの交点を求める連立一次方程式を利用します。(私の中学校では、1年生の時に習ったと思います)
〇使い方!!
①まず、適当な場所でエンダーアイを投げます。この時、投げた時のx座標とz座標をメモしておいてください。(出来れば小数第一位まで。整数でもいいのですが誤差が大きくなる可能性があります。)
②①で投げたエンダーアイが飛んで行ったところの真下に行き、そこのx,z座標をメモしてください。
③適当に離れたところに行き、(x,zそれぞれ700ずつ位推奨)座標をメモ。この時、あまりに離れすぎると正しい要塞の座標が出ません。理由は後述。
④③で投げたエンダーアイが飛んで行ったところの真下に行き、座標をメモ
イクラ側でやる作業はとりあえずここまで。
次に、例のプログラムを起動し、メモした8つの数字を指示に従って入力します。
プログラムの保存に関してはあとで書きます。
すると、入力した数字から導き出された要塞の座標が表示されるので、そこに行けば要塞が必ずある...わけではありません。理由は後述します。
○実演
f:id:isopen2000:20190725213125p:plain
エンダーアイを投げます。
f:id:isopen2000:20190725213202p:plain
エンダーアイの飛んだところの真下に行く。
f:id:isopen2000:20190725213252p:plain
離れた場所にいき、エンダーアイを投げる。
f:id:isopen2000:20190725213457p:plain
エンダーアイの飛んだところの真下に行く。
これらでメモした座標をプログラムに入力します。すると...
f:id:isopen2000:20190725213647p:plain
はい、出ました。この座標に要塞があるそうです。
先に言いますが、あまりこのプログラムは正確ではないです。
プログラムが示した座標に行き、
/locate stronghold
(要塞を見つけるコマンド)
と入力しました。すると...
f:id:isopen2000:20190725213748p:plain
どうやら、400ブロックほど離れているようです。
おそらく、座標を入力する時の僅かな誤差がこの結果を生んだのだと思います。
まあもちろんそれだけではないのでしょうが、あくまで「エンダーアイ2個でおおまかな要塞の位置を知る手段」と思っていただければいいと思います。
そこからエンダーアイを使って要塞を見つければ、エンダーアイの消費量を通常より少なくできると思います。
また、エンダーアイを投げる2点間の座標があまりにも離れていると、それぞれの場所で別々の要塞の方向にエンダーアイが飛んで行ってしまい、全く違った場所を示してしまう場合があるので、注意が必要です。
以下はプログラムのソースコードです。


Option Explicit
Dim x1
x1=InputBox("エンダーアイを投げた座標(1箇所目)のx座標を入力","座標を入力")
Dim z1
z1=InputBox("エンダーアイを投げた座標(1箇所目)のz座標を入力","座標を入力")
Dim x2
x2=InputBox("エンダーアイが落ちた座標(1箇所目)のx座標を入力","座標を入力")
Dim z2
z2=InputBox("エンダーアイが落ちた座標(1箇所目)のz座標を入力","座標を入力")
Dim x3
x3=InputBox("エンダーアイを投げた座標(2箇所目)のx座標を入力","座標を入力")
Dim z3
z3=InputBox("エンダーアイを投げた座標(2箇所目)のz座標を入力","座標を入力")
Dim x4
x4=InputBox("エンダーアイが落ちた座標(2箇所目)のx座標を入力","座標を入力")
Dim z4
z4=InputBox("エンダーアイが落ちた座標(2箇所目)のz座標を入力","座標を入力")
Dim num1
num1=x1-x2
Dim num2
num2=z1-z2
Dim num3
num3=x3-x4
Dim num4
num4=z3-z4
Dim slope1
slope1=num2/num1
Dim slope2
slope2=num4/num3
Dim num5
num5=z2-slope1*x2
Dim num6
num6=z4-slope2*x4
Dim num7
num7=num6-num5
Dim num8
num8=slope1-slope2
Dim x
x=num7/num8
Dim num9
num9=CInt(num5)
Dim y
y=slope1*x+num9
MsgBox "("&x&","&y&")"


これをメモ帳にコピペして、ファイル→名前を付けて保存から、ファイル形式をすべてのファイル、名前を~~(任意の名前).vbsにして保存することで動作します。
というわけで、おおまかに要塞の座標を計算してくれるプログラムでした。
それでは!!

追記
公開してから知りましたが、この記事で丁度50記事目なんですね...
皆様、平素よりChaos Corpを応援していただき、本当にありがとうございます。
皆様の星やブックマークは、我々の励みとなります。
これからも頑張っていきたいと思います。
繰り返しになりますが、本当にありがとうございます!!

にほんブログ村 ゲームブログ Minecraftへ
にほんブログ村