2012-06-18 30 views
0

我正在編寫一個基於文本的Java遊戲,我遇到了幾個問題,我無法得到我的頭。基於文本的Java遊戲通過變量到另一個類

我的代碼沿着這些線路的工作原理:

 public class main() { 
      run initial method for menu 
      Player player = new Player(name,1,1,1); 
      do{ 
      game code 
      while(running = true) 
      } 

     public class Player() { 
      string name 
      int age 
      int level 
      int exp 

      getName() 
      setName() etc etc 
      } 

     public class Train() { 
     kill monster 
     totalExp = monsters killed 

     } 

現在的問題是,我如何通過EXP獲得了其中有我的get和set方法我的播放器類? exp是在Train類中計算/生成的,但我需要將它傳遞給Player,以便我可以使用.set/.get並在我的Main類中顯示更新的信息。

會增加:

Player播放器=新的球員(名稱,1,1,1)到火車站類剛創建播放器的新對象,所以我將有兩個,和EXP分配給玩家Train(),但是隻留下Main()中的一個。

非常感謝您的幫助。

+0

爲什麼不在玩家類中添加火車對象,並且可能需要在玩家類中添加另一個'exp'參數。希望這有助於。 – Krishna

+0

小建議,作爲真實對象的java對象應該有一個實體名稱,而它們公開的方法應該有一個動詞,表示它們的行爲。 這不僅僅是遵循「標準」,也是爲了讓其他人更容易理解你想表達的內容。 – Morfic

回答

2

你在你的假設,即在列車將播放器的一個新對象正確會讓另一個不受影響。你可以做的是在你的Train類中添加對Player的引用,並將其分配給你的構造函數。例如。

class Train { 
    Player player; 
    public Train(Player p) { 
     player = p; 
     /* ... */ 
    } 
    /* ... */ 
} 

你可以調用player.method()在火車類,它會更新Player你傳遞給構造函數。

因此,當您創建Train的實例時,將其傳遞給您已創建的Player,並根據Train中發生的情況更新播放器。

Player p = new Player(...); 
Train t = new Train(p); 
+0

非常感謝您的迅速回復!現在就去實施這個。 – speak

2

您可以在播放器實例傳遞給Train方法,以便Train可在該實例上直接操作

如:

public void Train(Player player) { 
    kill monster 
    totalExp = monsters killed 
    player.setXP(player.getXP() + totalExp) 
} 
+0

謝謝你的回覆!證實了什麼樣的說法,欣賞它。 – speak

+1

我會建議有一個專用的方法'Player.addXP(int XP)'來保存封裝。 – Morfic