0

私は現在、環境内の動物と、それらが一般的にどのように相互作用するかをエミュレートする単純なシミュレーション ソフトウェアを構築しています。

「動物はオブジェクトとして作成されます。そのため、メインAnimalクラスと、このクラスを拡張する他の多くのクラス (つまりWolf, Lion, Deer、など) があります。

彼らが歩き回るための環境を作成するクラスを構築する必要があります。2次元配列が同じように機能するかどうかを考えていましたか?

動物オブジェクトは、このマトリックス上を「歩き回り」、周囲のセルをスキャンして他の動物と相互作用することができます。

これは、オブジェクトが「移動」するための特定の環境を構築するための最良の方法でしょうか? 意見募集中です。

4

5 に答える 5

0

これについては、おそらく多くの方法があります。そのほとんどは私には知られていません。ただし、最近、同様の問題を2つの異なる方法で解決しました。

二次元配列

「マップ」を 2 次元配列として実装することは明らかな解決策です。このシナリオでは、Listサイズを簡単に変更できるように実装する必要があります。ただし、特定の場所を検索するにはネストされたループなどが必要になり、インデックスがやや混乱する可能性があります。

地図

(私の意見では)この問題を解決するより良い方法は、Map. PositionX と Y の位置を記録する 2 つの変数 (3 次元マップの場合は 3 つ) を持つクラスを作成する必要があります ( メソッドequals()hashCode()メソッドも実装するようにしてください)。Positionその後、オブジェクトを実装のキーとして使用し、Mapのインスタンスに対して格納できますAnimal。これにより、特定の場所の検索が高速になり ( HashMap と ArrayList のパフォーマンスが正しいことを参照)、コードが整理されます。つまり、マップ全体を反復処理するときにネストされたループがなくなります。次のようにマップ全体をループできます。

for(Map.Entry<Position, Animal> entry : animalMap.getEntries()){
    //Do stuff
}

数年前、Fox/Rabbit シミュレーションを実装したチュートリアル プロジェクトを見ました。いくつかのアイデアについては、それを見たいと思うかもしれません: http://www.bluej.org/objects-first/

"Book Projects" .zip ファイルをダウンロードする必要があります。関連するプロジェクトは第 10 章にあります。

于 2013-09-09T07:27:09.633 に答える
0

2次元配列がいいでしょう。ある種の競技場を作るのはとても良いことです。

飛んでいる鳥や地面のワームなど、3次元も必要な場合は、3次元配列が必要になります

よろしく

于 2013-09-09T07:19:39.577 に答える
0

ええ、それは始めるのにとても良い方法です。頑張れ!

1 つのヒントとして、(3 次元ではなく) 実際に正方形にあるものにビットマスクを使用できます。したがって、地上にあるものは 0x1 ビットを占め、空中にあるものは 0x2 (= 2 進数で 10) を取ることができます。

だからあなたは持っています:

int[][] tiles = ...;
// something in the air moved to 0, 1..
tiles[0][1] ||= 0x2;
于 2013-09-09T07:19:49.323 に答える
0

チェス盤を考えてみてください。正方形で構成されています。各正方形にはピースを配置できます。

あなたのアイデアにとって、ボードは世界のようなものです。広場は世界の領域です。ピースは動物です。

世界は正方形の 2 次元配列を持つことができ、各正方形には 1 匹の動物またはそのList<Animal>上に動物がいる可能性があります。

于 2013-09-09T07:20:06.157 に答える