2013-04-29 59 views
0

從C++文件中讀取文本非常簡單。但是如果我想從我想作爲代碼運行的文件中讀取文本呢?從文件中讀取文本並將其作爲代碼運行

我正在做一個遊戲,我意識到描述這些對象的座標和類似屬性是每個關卡的一部分,需要非常長的空間。我想將它存儲在文本文件中,而不是代碼中,因爲隨着級數的增加,這會非常長。

我想讀取文本並運行它,如果它將成爲碼。怎麼做?

+0

你的意思是你的水平是由C++代碼組成的? – Pubby 2013-04-29 21:28:14

+0

我想你可以使用一個XML集成庫,看起來你想要的東西就像每個武器的配置文件。這就是說,如果你想解析一個文件,然後用包含的數據連接對象,你可以編寫自己的純文本。 – Nomad101 2013-04-29 21:29:11

+0

Pubby:是的,我希望C++中的所有東西,或者至少C中的東西。 – 2013-04-29 21:33:41

回答

3

這聽起來像你想創建某種domain-specific language (DSL),並寫下你的遊戲關卡。

另一種選擇是使用可被嵌入在C++的腳本語言,如Luaembedding)或Pythonembedding)。

編輯

如果你真的想在C++做的一切,你可以寫每個級別爲不同的文件(level1.h,level2.h,...),每一個都有自己的命名空間( level1等),並將它們全部包含在您從main中包含的「levels.h」中。

我想你甚至可以做一些模板編程技巧,讓你可以訪問他們喜歡的:

for (const unsigned int level_num, levels) 
{ 
    Level<level_num>::load() ; 
} 

這種方法的問題是,你失去了很大的靈活性。每次改變遊戲關卡時,都需要重新編譯(並重新分配)你的程序。

一個極端的(不推薦)的解決辦法是分配CPP文件爲文本,並編譯它們就飛到DLL文件,然後您可以加載... ::顫抖::

+0

我想要C++中的所有東西,或者至少C中的東西。如果我認爲的方法不起作用,那麼是否有其他方法來添加每個對象的值?如果我會在每個關卡的「main()」函數中執行此操作,則需要數千行,而且這會很混亂。我認爲這是相當明顯的。 – 2013-04-29 21:36:09

+1

@ZoltánSchmidt:你可能還是個初學者。大多數代碼不在'main'之外。在這種情況下,你可能有一個單獨的'level1.cpp'文件,它具有完整的級別定義,'level1.h'只列出了沒有初始化細節的對象,'main()'之前只是'#include「allLevels .H「'。 – MSalters 2013-04-30 00:44:45

相關問題