2012-06-23 117 views
0

我正在嘗試爲我的遊戲中的地圖創建一個簡單的類。地圖是由「磚」結構組成的2維向量。我試圖找出在行中輸入/輸出這些瓷磚的最佳方法。輸入和輸出帶維數的多維向量

例如,我曾經使用基於.txt的加載格式。 .txt文件如下所示:

1 0 2 0 0 0 2 4 5 6 3 
2 4 5 0 0 0 2 0 0 3 4 
0 3 5 2 5 3 0 5 5 3 4 
0 2 0 5 0 6 0 5 7 8 4 

然後,我會逐行查找每個圖塊的ID整數。 1代表草,0代表水,等等。當解析器到達一行的末尾時,它會跳到下一行的整數。

現在我試圖通過fwrite和fread使用二進制文件和結構來代替整數。我會如何去做這件事?我所見過的所有方法都是如何將二進制文件中的結構數組存儲起來,而不是如何存儲多維結構數組。有任何想法嗎?

編輯:是的,我可以將二維矢量存儲在文件中,但這不會讓我做無縫地圖加載,我需要。我有大的地圖文件,所以一次加載100k瓦片會佔用CPU。

+0

'fread'和'fwrite'不是C++。使用'fstream'。 – Dani

+0

@Dani - 不完全正確。 C標準包含在C++標準中,所以在技術上'fread()'和'fwrite()'是C++。不過,我當然同意你的看法,基於流的I/O被認爲是更好的風格。 –

+1

@MichaelJ:這是廢話。 C++標準*有時包括* C標準的特定版本*中的部分*。 'fread','fwrite',可能它們在那些部分,可能它們不是,但是純粹的廢話來陳述C標準包含在C++標準中。另外,內存泄露和UB是C++標準的一部分,但沒有人會考慮推薦它們。 – Puppy

回答

0

如果你希望你的地圖是人類可讀的,你需要編寫一個解析器。然而,如果你不在乎,你應該做一些完全不同的事情:使用序列化,例如,從Boost

對於你的情況,對於遊戲來說很常見的第三種替代方法是將地圖存儲爲圖像文件。然後,您可以使用您最喜歡的圖像處理程序編輯地圖,並且可以通過程序輕鬆解釋。 許多庫可以爲你讀取圖像數據(並以二維數組的形式呈現給你),並且在遊戲中你可能已經有了類似的東西。