2013-05-26 40 views
0

我正在編寫一個2d java遊戲,隨着地圖的滾動,我會隨機產生生物。但是,我需要隨機選擇一種生物類型 - 這意味着我需要從列表中隨機選擇一個類並創建一個新的實例。創建隨機類的新實例的最高效/最安全的方法

我的實體類當前採用構造函數參數(對遊戲的引用),但如果它使此過程更容易,則可以移動它。

我原本打算使用一個枚舉來定義實體類型以及「處理程序類」,但是在這一點上枚舉系統對我來說效果不佳,因爲對於不同實體的不同屬性存在太多邏輯。

+0

擁有一個帶有工廠方法的類併發送一個參數來告知要創建的內容。請注意,所有這些*隨機*類應該有一個共同的父類或接口,以便簡化代碼。請參閱[工廠方法模式](http://en.wikipedia.org/wiki/Factory_method_pattern) –

+0

要跟蹤Luiggi的評論,帶有工廠方法的類將決定生成哪個怪物並構建該類的實例。這些類可能非常不同,但應該有一個通用的接口或抽象類。 – MathSquared

+0

雅,我以前使用過這種模式,但不是隨機的東西 - 這是有道理的。我想我只是根據添加到列表中的類的數量來使用一個隨機數 – helion3

回答

2

創建你的怪物枚舉,並使用Math.random()挑一:

public enum Monster { 
    AcidBlob, 
    Orc, 
    Etc 
} 

Monster m = Monsters.values[Math.random() * Monsters.values().length]; 

你可以就像一個普通類添加方法和字段到你的枚舉。

0

如果您願意,可以使用類名列表,並使用Class.forName(className).newInstance()創建實例。您不需要將結果轉換爲實際的類名,只需將所有怪物的公共超類轉換爲實際的類名即可。

String randomMonsterName = listOfMonsterNames[randomIndex]; 
Monster newMonster = (Monster) (Class.forName(randomMonsterName).newInstance()); 

它確實需要你的怪物可以用默認的構造函數構造。 (否則你可以做,但會變得更加混亂。)

相關問題