2014-01-07 34 views
0

創建對象我編程的RPG遊戲,和我想要的字符對象來創建控制自己的「大國」的對象使用名稱作爲字符串變量RPG

每個字符內有一個字符串變量powerOne,PowerTwo等防爆。 powerOne =「攻擊」

我需要一種方法來做到這一點:

"powerOne" powerOne = new "powerOne" 

(因爲一旦人物學習新技能,他們將被替換需要的地方的實際功率使用字符串的計算機)

這樣,我總是可以將其餘代碼中的權力作爲powerOne引用。例如, powerOne.dealDamage()

+0

你的設計是錯誤的。使用接口你可以完成同樣的事情。所以學習'接口'和'抽象'。 – usp

+0

我不明白你需要什麼。 –

+0

我的頭痛... – Rottingham

回答

0

聽起來像你的'權力'是對象,而不是字符串。

做一個接口:

public interface Power { 
    void dealDamage(); 
} 

然後讓所有的個人力量類,如Attack等實現Power interface

然後在您的Character中,您可以獲得Power接口派生的對象的List

+0

每個單獨的力量是一個類。我想創造一個物體,但是由於角色不斷地取代他們已知或裝備的能量,除非遊戲中的每一個力量與你的弦相比,否則沒有辦法創建一個有效的方法......這就是我試圖避免。 – user3171057

+0

您也可以使用散列表來映射權力對象的實例名稱。然後,您可以輕鬆地添加或刪除地圖上的權力,並且還可以在要調用dealDamage()時快速找到適當的權力對象的實例。如果您想知道角色擁有什麼樣的權力,您還可以從地圖上獲取按鍵列表。 – Jason

1

String powerOne = new String(「」);

當他們學習他們的新的 '權力'

powerOne = 「攻擊」。

雖然您對powerOne的功能還不清楚。它是一個字符串還是它自己的類poweredOne?如果它是一個類,爲什麼不在這些行上創建一個setName函數呢?雖然我建議在這種情況下製作Power類。試着讓你的代碼看起來像這樣...

Power powerOne = new Power(「Attack!」,10); //假設你使用String //名稱來構造它,並且int Damage。

隨時問任何問題,我很樂意提供幫助。

+0

一個角色可以通過替換較弱的角色(一個小精靈)來學習最多四種權力。我希望遊戲通過使用字符串變量而不是實際預定義的名稱來創建基於預製類型的權力/能力的對象。該變量將在對象創建時從文件中讀取,然後創建用於戰鬥的電源對象。我知道要做到這一點的唯一方法是創建一個接口,該接口具有if語句來檢查字符串變量,但這樣做效率很低...... – user3171057

0

您應該使用名爲CharacterPower的界面,其中包含一個名爲dealDamage的方法。

Yould可以將電源的名稱保存到一個String變量中,然後查詢一個CharacterPowerFactory,它將使用它的名稱爲您提供CharacterPower的正確實例。

成才,如:

String powerOne = "Attack"; 

CharacterPower power = CharacterPowerFactory.getInstance().createPower(powerOne); 
power.dealDamage(); 


/** 
* Your factory creating powers based on names. 
*/ 
public class CharacterPowerFactory { 
    private static final CharacterPowerFactory SELF = new CharacterPowerFactory(); 
    private CharacterPowerFactory(){} 

    public static CharacterPowerFactory getInstance() {return SELF;} 

    public CharacterPower createPower(String powerName) { 
     if("Attack".compareTo(powerName) == 0) { 
      return new AttackPower(); 
     } 

     return null; 
    } 
} 

/** 
* Your Attack power implementation 
*/ 
public class AttackPower implements CharacterPower { 
    public void dealDamage(){ 
     // Dealing the damage 
    } 
} 

/** 
* Your interface definition 
*/ 
public interface CharacterPower { 
    void dealDamage(); 
}