ゲームのキャラクターをバイナリ ファイルに書き込んでゲームを保存しようとしています。残念ながら、私のバイナリ ファイルはテキスト ファイルのようにファイルに書き込んでいます。
文字列をインスタンス化し、その文字列に対して保存関数を呼び出すと、バイナリ ファイルに完全に書き込まれます。ただし、CharacterSave 関数から同じ関数を呼び出すと、ファイルがバイナリ ファイルではなくテキスト ファイルとして表示されます。
呼び出し階層は次のようになります
Character.Save() は文字列 save を呼び出し、バイナリ ファイルに書き込みます。
Character.Save() は、バイナリ ファイルに書き込むポーチ (コインポーチ) の保存を呼び出します。
Character.Save() は財布 (つまりバックパック) の save を呼び出します。これは動的配列の save を呼び出します。これは要素数をバイナリ ファイルに書き込み、ポーションの save メソッドを呼び出します。これは文字列の save メソッドを呼び出します。
編集:問題を解決しました。方法はわかりませんが、別の .dat ファイルを作成するだけで解決しました。
関数を保存するための呼び出し
//Create instance of binary file object
std::ofstream file("game.dat", std::ios::out | std::ios::binary);
//Check if file is open
if(file.is_open())
{
//Save character
myFavoriteCharacter.Save(file);
//Close the file
file.close();
}
else
std::cout << "\nFile did not open! " << std::endl;
キャラクターセーブ機能
void Character::Save(std::ofstream & file)
{
mName.Save(file);
mPouch.Save(file);
mPurse.Save(file);
}
文字列保存機能
void String::Save(std::ofstream & file)
{
int tempLength = 0;
tempLength = this->getLength();
//Write the length of the string
file.write(reinterpret_cast<char *>(&tempLength), sizeof(int));
//Write the string
file.write(reinterpret_cast<char *>(this->mStr), tempLength + 1);
}
CoinPouch(つまりポーチ)保存機能
void CoinPouch::Save(std::ofstream & file)
{
file.write(reinterpret_cast<char *>(&mPlatinum), sizeof(int));
file.write(reinterpret_cast<char *>(&mGold), sizeof(int));
file.write(reinterpret_cast<char *>(&mSilver), sizeof(int));
file.write(reinterpret_cast<char *>(&mCopper), sizeof(int));
}
DynamicArray 保存関数
void DynamicArray::Save(std::ofstream & file)
{
//Write the number of elements
file.write(reinterpret_cast <char *>(&mElements), sizeof(int));
//Save each element
for(int i = 0; i < mElements; i++)
mArray[i].Save(file);
}
ポーションセーブ機能
void Potion::Save(std::ofstream & file)
{
mName.Save(file);
mDescription.Save(file);
mPotency.Save(file);
mCost.Save(file);
}