2017-02-28 55 views
1

我試圖存儲不同的敵人列表。每個敵人都有一個起源,並且只能在其原點位置產卵。每個敵人也有困難,應該與同樣難度的敵人一起存放。什麼是存儲靜態對象列表的最有效方式?

我想象爲敵人的靜態3D陣列像這樣:

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

那兒有(從左至右)的位置,難度指數。

玩家輸入的每個位置都會從這個靜態數組中填充一個ArrayList of Enemies。

在這種情況下是否有更高效的數據結構?

(這個列表將是硬編碼的程序的過程中不應改變)

編輯 -

我希望優化訪問時間。這個遊戲會產生多個位置,每個位置都需要根據其來源和難度從列表中隨機抽取敵人。

按照要求,我會對這個程序的用例進行一些思考。一旦我有適當的解決方案,我會更新。 (謝謝)

+1

目前還不清楚,沒有對象面向敵人的對象(或EnemyLocation對象)的名單,大概非常容易出錯。我不建議在這裏想象太多面向陣列的解決方案。 – Kayaman

+0

你需要告訴我們你正在設法優化 – ControlAltDel

+0

我希望優化訪問時間是什麼樣的效率。這個遊戲會產生多個位置,每個位置都需要根據其來源和難度從列表中隨機抽取敵人。 – Czurch

回答

4

它在概念上是明智的不是一個好主意。

此時您確實不擔心表現。您擔心創建一個有用的,有幫助的對象模型,它允許您編寫優雅,易於閱讀且易於增強的代碼。

使用3D陣列實現了這些目標的

換句話說:你退一步;並認真思考需要訪問敵對對象的「用例」。從那裏來,你決定是否應該用不同的地圖去做例子;或不同的套,...而不是使用3D作爲中央「存儲點」。

編輯,給予您的評論:有兩面的位置:

  1. 數組是在Java中非常不靈活。您無法動態更改其大小。除此之外,它們使用起來真的很「醜陋」:通過「三維」可能對於某個「進入路徑」很方便;但它可以使其他事情非常困難(例如,當搜索某個敵人,那麼你必須做這個3-dim迭代的東西......如:醜)
  2. 一個應該嘗試使設計是「開放「以適應」發生率高「的變化。例如:你今天有一定數量的敵人;但假設你的「遊戲」適合你;你會遲早(相當早)想要加強它;例如允許動態添加/移除敵人。然後,你使用3D陣列編寫的許多代碼將成爲一個真正的障礙。

除此之外:是的,在「遊戲世界」,應該有一個組件是負責跟蹤遊戲中的所有元素。但是:這個組件如何內部組織東西更多的是實現細節。你應該把重點放在那個GameWorld上的「有用的」方法上;或者像我之前說的那樣:理解代碼如何訪問/迭代/搜索敵人以執行遊戲本身的方式。然後你看看支持這些「用例」的數據結構。

最後:假設這是一個學習練習 - 你仍然可以從一個3d數組開始。它會教你很多;我只是指出:你不會在更「真實世界」的應用程序中這樣做;如果你選擇這個選項,你很快就會面臨一些限制/障礙;只是由您的解決方案的性質。

+0

請原諒我在這裏不理解。將我的敵人存放在一個地方不是一個好主意嗎?我試圖想想存儲這些敵人的不同方式。但是我怎麼知道我是否找到了正確的? – Czurch

+0

加入一些更新;希望他們幫助! – GhostCat

0

我想到的是一幅地圖。該位置是關鍵和值將是對象的名單,表示敵人和它的位置 - 讓我們把它包含一個敵人,它的位置的EnemyLocation對象(或者你可以改變敵人包含它的位置,這似乎是個不錯的想法,但我不知道你的代碼)。所以,當玩家進入「山」區域,你這樣做enemies.get(「山」),你回來

相關問題