2017-02-28 10 views
1

私は別の敵のリストを保存しようとしています。それぞれの敵は起源を持ち、起源の場所にのみ出現することができます。それぞれの敵には難易度があり、同じ難易度の敵と一緒に保存する必要があります。オブジェクトの静的リストを格納する最も効率的な方法は何ですか?

Enemy[mountain][2][5] = new Enemy("troll") 

場所、難易度、インデックス(左から右へ)フィールドは、次のとおりです。

は、私はこのような敵の静的な3次元配列としてそれを想像しました。

プレイヤーが入力する各位置は、この静的配列からの敵のArrayListを入力します。

このシナリオでは、より効率的なデータ構造がありますか?

(このリストは、ハードコーディングされたされ、プログラムの途中で変更すべきではありません)

編集 -

私はアクセス時間を最適化するために期待していました。このゲームは、それぞれが起源と難易度に基づいてリストから敵をランダムに引き出す必要があるいくつかの場所を生成します。

リクエストごとに、私はこのプログラムの使用事例をもう少し考えていきます。私が適切な解決策を取ったら、私は更新します。 (ありがとう)

+1

おそらくオブジェクト指向ではない非常にバグが多い。あまりにも多くの配列指向のソリューションを想像することをお勧めしません。 – Kayaman

+0

最適化しようとしている効率の種類を教えてください – ControlAltDel

+0

私はアクセス時間を最適化したいと考えていました。このゲームは、それぞれが起源と難易度に基づいてリストから敵をランダムに引き出す必要があるいくつかの場所を生成します。 – Czurch

答えて

4

概念的には賢明ではない。

あなたは実際にこの時点でパフォーマンスについて心配していません。便利で便利なオブジェクトモデルを作成すると心配します。これは、エレガントで読みやすく、使いやすいコードを書くことができます。

3Dアレイを使用すると、なしこれらの目標が達成されます。

他の言葉で言います。あなたのEnemyオブジェクトにアクセスする必要がある「ユースケース」について懸命に考えてください。そこからやって来ると、たとえば、異なるマップを使用するかどうかを決めることができます。または異なるセット、...を使用する代わりに、3Dを中央の「保存ポイント」として使用することができます。あなたのコメント与え

編集、次の2つの側面がここにあります

  1. 配列は、Javaで非常に柔軟性に欠けます。サイズを動的に変更することはできません。そして、それを超えて、彼らは実際には "醜い"使用しています。これは、 "3次元"を通ることは、特定の "エスケープパス"にとって便利かもしれません。しかし、それは他のものを作ることができます(特定の敵を探しているときのように、あなたはこの3次元反復のものを行う必要があります...):
  2. 1つは、 「起こっている」率が高い変更については「開く」を選択します。例:今日あなたは一定数の敵を持っています。あなたの "ゲーム"はあなたのために働くと仮定します。遅かれ早かれそれを強化したいと思っています。例えば、敵の動的な追加/除去を可能にすることによって行われる。その後、3D配列を使って書いたコードの多くは、本当の障害になります。その向こう

:はい、「ゲームの世界」で、ゲーム内のすべての要素を追跡するための責任がある要素があるはずです。しかし、このコンポーネントがどのように内部的に物事を整理するかは実装の詳細です。そのGameWorldに最初に "有益な"メソッドを置くことに焦点を当てるべきです。私はそれを前に置いています:ゲーム自体を実行するためにコードがどのようにアクセス/反復/検索する必要があるかを理解する。そして、これらの「ユースケース」をサポートするデータ構造を調べます。

最後に、これは学習の練習であると仮定すると、まだ3D配列から開始できます。それはあなたに多くを教えてくれるでしょう。私は単に指摘している:より現実的なアプリケーションではそうしないだろう。あなたがこのオプションを選択すると、すぐに一定の制限/障害に直面します。あなたのソリューションの本質によって。

+0

ここで私の理解の欠如のためにご容赦ください。私の敵を一箇所に保管することは良い考えではありませんか?私はこれらの敵を保管するさまざまな種類の方法について考えようとしました。しかし、もし私が正しいものを見つけたら、どうすればわかるでしょうか? – Czurch

+0

いくつかの更新情報を入力してください。彼らが願って! – GhostCat

0

地図は私の頭に浮かぶものです。位置はキーであり、値は敵とその位置を表すオブジェクトのリストです - 敵とその位置を含むEnemyLocationオブジェクトとしましょう(または、敵と同じ位置になるように変更できますアイデアだが、私はあなたのコードを知らない)。プレイヤーが "山"地域に入ると、enemies.get( "山")のようなことを行い、Enemyオブジェクト(またはEnemyLocationオブジェクト)のリストを返します。

関連する問題