0

無限の 2-D ワールド ジェネレーターを作成したいと考えています。世界のある部分を表すチャンク クラスを作ろうと思いました。チャンクを保存する場所と、新しいチャンクを生成する方法がわからないだけです。

チャンクをベクトルに保存し、それらの X、Y を記憶できると考えました。プレーヤーの場合、ベクトルを形成するチャンクへのポインターを使用して 3x3 配列 (プレーヤーが中央に立っている場所) を作成します。たとえば、彼が上に移動すると、上段と中段を下に移動し、ベクターから新しいチャンクをロードします。これが良いアイデアかどうかはわかりませんが、最初に思いついたのはこれでした。

とにかく、チャンクを生成する方法がわからないので、チャンクは互いに一致します(水の近くの砂漠ではありません)。一定の次元マップを生成することさえ、私にとっては非常に困難です (私は本当に無限の世界が必要です)。

少し前に洪水法を使って一定次元の世界を生成したので、最初はマップ全体を草で埋め、次に水、木、その他のランダムなスポットを作成しましたが、無限の世界の場合には使用できないと思います.

4

2 に答える 2

4

これらの問題は、Conway's Life の実装で対処されています。

無限の世界を実現し、互いに異なる部分のみを処理する 1 つの方法は、hashlife アルゴリズムとデータ構造の説明で説明されています。また、チャンク内での高いパフォーマンスとチャンク全体での良好なパフォーマンスも扱います。同じチャンクは、多くのチャンクが指すことができる 1 つの記述によって表されます。

http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478

http://en.wikipedia.org/wiki/Hashlife

http://golly.sourceforge.net/

http://tomas.rokicki.com/hlife/

http://www-users.cs.york.ac.uk/~jowen/hashlife.html

于 2012-07-09T14:00:58.147 に答える
1

これはおそらくこれを行う正しい方法ではありませんが、いくつかのアイデアが得られるかもしれません。できることは、チャンクの 3x3 2D 配列またはチャンクの 5x5 配列をメモリに格納することです。これらのチャンクの更新と、プレーヤーの位置に応じて読み込まれるチャンク。残りの世界はファイル内に格納でき、読み書きが可能です。プレーヤーが開始されていないチャンクまたは空のチャンクの 2 ~ 3 チャンク内を移動する場合、任意の方法でそのチャンクを生成します。

これの難しい部分は、複数のチャンクにまたがる川や水域、森林、またはその他のタイプの風景がある場合、新しいチャンクを生成するときにそれを処理する別のアルゴリズムが必要になることです。生成するたびに、おそらく 2 つの線の交点を測定する必要があります。陸地と水域、平地と森林が交わる線と、塊の縁を表す線。そのポイントを取得したら、チャンクのそのポイントのどちら側に土地/水が必要かを把握し、そこからランダムに生成することができます。

とにかく、これはMinecraftで起こっていることです。

于 2012-07-09T13:31:37.933 に答える