2016-04-06 130 views
-6

我正在嘗試使用C++製作RPG,現在只是一個文本RPG。我想創建很多類「怪物」的實例。假設我需要製造100個怪物(地精,食人魔,龍等),我應該如何儲存這些物品?我應該有一個專門用於存儲類實例的單獨文件嗎?如果是這樣,如何?我想將它們全部放在一個文件中,以免在其他位置佔用空間。將類實例存儲在文件中

回答

1

您可以將該類存儲在binary文件中,並使用writeread

也許這就是你想要做的,這裏是一個簡單的例子。
比方說,我們有這個類:

class Goblin { 
public: 
    int health; 
    int damage; 
}; 

和文件到到:

fstream file("record.bin", ios::trunc | ios::binary | ios::in | ios::out); 

現在,我們可以創建一個Goblin對象:

Goblin my_goblin; 
my_goblin.health = 100; 
my_goblin.damage = 50; 

然後我們就可以將數據寫入二進制文件:

file.write(reinterpret_cast<char*>(&my_goblin.health), sizeof(my_goblin.health)); 
file.write(reinterpret_cast<char*>(&my_goblin.damage), sizeof(my_goblin.damage)); 

運行後,二進制文件將包含有關您的Goblin類的數據。


現在,讀取數據,你不希望ios::trunc標誌有:

fstream file("record.bin", ios::binary | ios::in | ios::out); 

我們再次創建一個Goblin對象:

Goblin goblin; 

然後我們就可以讀取數據進入我們的班級:

if (!file.read(reinterpret_cast<char*>(&goblin.health), sizeof(goblin.health))) { 
    // handle error 
} 
if (!file.read(reinterpret_cast<char*>(&goblin.damage), sizeof(goblin.damage))) { 
    // handle error 
} 

現在打印,看看它的工作:

// Output result if all went well 
cout << "Goblin health = " << goblin.health << '\n'; 
cout << "Goblin damage = " << goblin.damage << '\n'; 

輸出:

Goblin health = 100 
Goblin damage = 50 

這實在是沒有必要的!

對於製作基於文本的遊戲,您不需要上述方法。只需編寫你的類並保存在頭文件中。單獨聲明與實施。

例:Goblin.hGoblin.cppDragon.hDragon.cpp

+0

感謝您的詳細示例,我可能會將它們存儲在頭文件中,儘管您已經提示,謝謝! – Joe

0

你可以在文件中存儲對象的實例,這稱爲序列化,並且有很多方法可以完成它,我建議在這個方向進行更多的研究。

我相信你不必爲你的程序做這個,因爲可能有足夠的空間存儲你所有的怪物,然後一些。

+0

好了,謝謝你的建議,我會做系列化一些研究,看看它的全部意義所在。 – Joe

相關問題