2012-04-16 59 views
0

我正在爲Java編程類編寫一個Text Adventure遊戲。我正在設置一個房間,每個房間都有一個父級abstract房間,每個房間都會繼承和配置。在文本冒險中實現退出

對於出口,房間只會調用.addExit()方法並將其傳遞給出口對象。遊戲應該只有每個房間的一個實例。退出對象應該有一個目標字段指向在構造函數中初始化的遊戲房間之一。

我的問題是我不知道如何通過退出構造函數一個預先存在的房間參考,而不是一個新的房間對象。我看到它的方式有兩種可能的方式:

  1. 直接通過exit構造函數引用房間實例。
  2. 有一個靜態類,用於跟蹤所有房間實例,並具有從字符串名稱或類中返回實例的方法等。
    然後,通過傳遞出口對象的構造函數來識別目標房間,例如唯一的字符串名稱,對象構造函數然後使用該名稱來調用返回空間實例的靜態類的方法之一。

我不確定哪個是最好的選擇,如何實現任一選項,或者如果有更好的方法。

+0

聽起來像(雙)鏈接列表模式。 – assylias 2012-04-16 14:59:43

+4

你是這個 – ControlAltDel 2012-04-16 15:02:37

+0

過於複雜豈不房間對象只是通過他們的'this'到addExit構造? – CPerkins 2012-04-16 15:05:05

回答

3

我不認爲有每個房間一個單獨的類是一個好主意的例子。你可能更喜歡單個課程Room,其中每個實例代表一個單獨的房間。 (我知道MUD是用這種方式編碼的,但即使在那裏你也有「虛擬」)

但除此之外,問題是:是Exit是房間的屬性還是應該分別管理?

答案取決於你想要做什麼Exit s。例如,如果您想要強制執行雙向退出(即,如果從A房間到B房間,應該有B房間到A房間),則單獨的退出管理類可能是合適的。但是,如果您只需要列出房間中的所有出口,就可以通過其中一個移動到另一個出口,它們可以是Room的屬性。

如果你不提前知道,用簡單的開始(出口分別添加到每個房間),如果它不工作,你可以隨時切換到一個更復雜的解決方案。

+0

退出不房間的財產爲我的目的。我的主要問題是如何將房間實例引用傳遞給退出對象。另外,如果不是每個房間單獨的課程,你有什麼建議?如果每個房間都在一個會很快混亂的地方初始化。 – Hussain 2012-04-16 15:23:35

+0

@Hussain理想情況下,它將從配置中初始化。那麼你的原始問題也會得到解決,因爲你可以在閱讀配置時添加出口。 – biziclop 2012-04-16 15:42:17

+0

對不起,我沒有關注。通過從配置初始化你的意思是通過從文本文件解析配置來配置對象,或者在配置功能中完成所有配置,或者? – Hussain 2012-04-16 17:33:53

1

你這個過於複雜

這裏是你如何能做到這


    public abstract static class Room { 
     List exits = new ArrayList(); 
     public void addExit(Room r) { 
      exits.add(r); 
     } 
    } 

+0

退出有自己的屬性,所以有一個專門的退出類不是一個壞主意。 – biziclop 2012-04-16 15:06:27

+2

'名單exits'大概應該是'地圖<方向,室> exits',然後你就可以例如寫'exits.put(WEST,roomWhereLifeIsPeaceful)'或'exits.put(HUBWARDS,entranceToAnkhMorpork)' – 2012-04-16 15:15:12