🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

899閲覧

地面と接続されているかを計算するアルゴリズム?

devsx

総合スコア173

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/09/07 04:25

編集2019/09/07 04:30

マインクラフト上で、ブロックが地面と接続されているかをチェックする仕組みを作りたいのですが、
適用できる既存のアルゴリズムか、数学的な考え方があれば教えていただけますでしょうか。

マインクラフト上でというのは、ゲーム内のレッドストーンブロックでやるのではなく、サーバープラグインを作ってやるつもるなので、
サーバーAPIを利用できます。

例えば下記のように

  • ある座標xyzの隣接するブロックの種類(ブロックの場合もあり、空気の場合もある)をチェック
  • ユーザーが設置/破壊したブロックの座標や種類を取得

などなど割と自由な操作が可能です。

あるブロックのまとまりが宙に浮いてしまっていることを検知できるようにするのが目的です。

■ < 浮いてる ■■ ■ < 浮いてる ■■ ----------- 地面

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/09/07 04:28

「地面」の定義は何でしょう. 土ブロックや草ブロックが「地面」なのでしょうか.
devsx

2019/09/07 04:31

今回の場合は、y座標64にあるブロックが地面と定義して問題ありません!
jimbe

2019/09/07 04:37

なるほど. では「あるブロックのまとまりが宙に浮いてしまっていることを検知」というのは, 極端かと思いますが例えばエンドは大小さまざまな島が奈落の上に浮いています. あれも全て「浮いている」判定となる感じでしょうか.
devsx

2019/09/07 04:44

そういうことになりますね・・・ ただ最初から浮いている状態のワールドは想定していなくて、ユーザーが積み上げたり壊したりして、結果的に浮いてしまったブロックを検知する、というようなものを想定しております。
devsx

2019/09/07 04:46

縦に100ブロック積んで、一番したのブロックを破壊したら、↑の99ブロックが浮いてしまったmとかですね。このようにy方向だけの検知ならなんとなくできると思うのですが、これが±x,±y,±z方向もチェックする必要があるので、効率的な検知方法があれば・・・との考えです。
jimbe

2019/09/07 04:59

おそらく, 地面(Y64) と「壊したブロックの周囲の非空気ブロック(?)」との(非空気ブロック経由の)経路を探す問題…のような感じかと思いますが, 私も空中に線路を1000ブロック以上引いたりしていますが, これが接地されているかを調べるのに効率的な方法があるようには... すいません.
devsx

2019/09/07 05:40

いえいえ、一緒に考えていただけただけでありがたいです! ありがとうございました!
guest

回答1

0

ベストアンサー

原理的にはこの質問と同じ考え方になるのではないでしょうか。
これは「島を数える」ですが、その探査中に地面(今回の場合、y座標が64のブロック)に行き着かなければ「浮いている」と判定できると思います。

投稿2019/09/07 12:48

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

devsx

2019/09/10 06:08

なるほど、幅優先探索で隣接するブロックをフルスキャンして行く形ですね! その中で、「y座標が64のブロック」であるかどうかをチェックしていく、と。 使えそうな気がしました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問