对于我目前的项目,我希望最终能够将游戏状态保存到文件中。
我希望有一个非常简单的系统,我以ASCII格式存储所需的可变数据。我如何收集所有变量?
我
当然,我还需要稍后从文件中初始化变量。
我似乎很难在这里做出决定。所以我谦虚地要求一些提示。
干杯!
答案 0 :(得分:0)
注意:我已经很久没用过C ++了,所以语法/库函数的使用并不完全准确。但是,希望它确实提供了这个想法。
设计模式以拯救!将一些处理程序注册到Save
类中,这将为您保存每个变量。
首先,我们定义interface:
class ISerializable {
public:
virtual std::vector<byte> serialize() { throw new NotImplementedException; }
}
接下来,我们编写Save
类来保存每个处理程序:
class Save {
std::map<std::string, ISerializable> handlers;
public:
void save(string filename) {
// Open file as writeable bytes
std::ofstream outFile(filename, std::binary | std::trunc);
// You may want to use an iterator here.
// I forgot the exact syntax.
// pair.Key is the name
// pair.Value is the class you are saving
foreach(pair in handlers) {
// This is an example.
// Your actual file format will be a bit more complicated than this.
outFile << "Name: " << pair.Key
<< "Data: " << pair.Value.serialize();
}
}
void attachHandler(std::string name, ISerializable handler) {
handlers[name] = handler;
}
}
然后,对于要保存的每个变量,为其类定义序列化函数:
class MyObject : public ISerializable {
public:
std::vector<byte> serialize override {
// return some list of bytes
}
}
将其处理程序附加到Save
实例:
Save save; // Instantiate your saving object.
// Consider making this static.
MyObject myObject;
save.attachHandler("myObject", myObject);
您可能希望将XML视为存储格式:如果处理不当,存储原始字节可能会非常棘手。