2016-09-25 15 views
2

我有一個小程序,基本上向用戶提示問題,閱讀答案,檢查其有效性等等,直到完成RPG字符的創建。我迅速獲得了幾個班級,每個班級都與一堆要存儲的消息相關。在C++命名空間中存儲大量消息

我的問題是:什麼是存儲這些消息的最佳方式?

我的第一個(髒),嘗試是有一個單獨的文件messages.hpp:

namespace M 
{ 
    string const message1("what's your name ?"); 
    // + many others 
} 

但許多類依賴於這個文件,它的任何微小的變化暗示很長的編譯時間。

因此,爲了重新分配消息,我想將相關消息包含爲需要它們的類的靜態成員,但是我發現它讓我的類頭可讀性受損。所以,我很困惑:我可以創建一個類中的子名字空間,這將是這樣一個消息收集:

// monster.h 
class Monster 
{ 
// members and methods declared here 
}; 

namespace Monster::Messages 
{ 
    string const message1("what's your name ?"); 
    // + others messages only used by Monster 
} 

,並可能是這樣使用的:

// monster.cpp 
Monster::Monster() 
{ 
    cout << Messages::message1 << endl; 
} 

但後來,我想知道:

  • 會的Monster::messages所有的消息被複製爲類Monster的每個實例?
  • Monster::messages的所有消息複製到包括monster.hpp(靜態鏈接)在內的所有文件中?
  • 這些消息是否在Monster中被視爲成員,靜態成員或根本不成員?
  • 如果我在Monster :: messages中使用static關鍵字會發生什麼, 它具有靜態鏈接或靜態成員的含義?

當然,這是不好的做法嗎?有一個聰明的方法嗎?

+0

這不是數據庫的用途嗎? –

回答

4

我認爲最好的做法是將所有這些數據信息存儲在遊戲的外部數據文件中。

我會爲您提供這樣的一些好處:

  • 代碼更加清晰和光明。

  • 即使沒有編譯二進制文件,也可以對數據遊戲做很少的修改。這對於那些必須測試的數據參數非常重要,並且每次您更改運行遊戲的值時都要查看所有副作用。 (例如一些關於怪物健康,傷害,GUI位置等的參數)。通過這種方式,測試階段不需要再次編譯二進制文件,而且速度更快。

  • 允許其他遊戲開發者輕鬆修改遊戲參數。例如對於團隊中不是程序員的人員。

  • 允許在不改變代碼設計的情況下輕鬆修改遊戲數據。例如,讓我們假設兩年後,遊戲變得非常流行,並且您希望以多種語言翻譯它以獲得更多用戶。如果所有這些數據都嵌入代碼中,您應該重新設計和修改代碼,可能更重要的是,只有您有權訪問代碼並瞭解代碼。在另一種情況下(當數據存儲在外部文件中時),更多人可以輕鬆訪問和升級遊戲。


你怎麼能達到這個過程可能是另外一個問題上如此,但也有幾種選擇。

例如,您可以創建一個獨特的大文件(這意味着一些智能技巧,特別是出於性能原因),或者您可以將數據參數分佈在多個文件中。 所以你的遊戲將會有一個階段加載其中的數據是從磁盤中讀取(幾乎所有其他遊戲)。

此外,您應該考慮(如果您需要)一種方法來隱藏這些文件,並避免遊戲用戶可以修改它們。

+1

*咳嗽* SQLite *咳嗽* –

+0

@LightnessRacesinOrbit是的,正如我所說有很多方法來做到這一點。數據庫是最簡單的,也許是最有效的選擇。在具體情況下,可能會有不同的選擇。這取決於許可證,數據量,編程技巧等等。 –

+0

所以SQLite可能是一個解決方案。那麼MySQL呢?數據庫中的初學者最簡單的方法是什麼? – Funky

相關問題