初書き込みです。内容がDXライブラリの要素ではなくて恐縮です。
最近、全くC++の事を知らない状態で漠然とゲーム制作を始めたんですが、
プログラミングのセオリーとかが判ってないので以下の解釈で大丈夫なのか不安で書き込みました。
参考にしたサンプルコードは「新・ゲームプログラムの館」さんの セーブデータの作り方の項目
(
https://dixq.net/g/58.html)で、構造体を使ってセーブファイルを読み書きする、という内容です。
//---------------------------------------------------------------------------------------
「save.cpp内の記述」
//セーブデータの構造体
typedef struct
{
int start_soft; //001起動回数
int play_time; //002起動時間
int highscore; //003ハイスコア
}save_data_t;
//構造体変換用
int START_SOFT = 0; //001起動回数
int PLAY_TIME = 0; //002起動時間
int HIGHSCORE = 0; //003ハイスコア
//ロードの処理
void Savedata_Load()
{
char *name = "save_data.dat"; //ファイルの場所
FILE *fp;
save_data_t save_data;
if( ( fp = fopen( name, "rb" ) ) == NULL )
{
//セーブファイルが開けない・存在しない時の処理
printfDx("セーブファイルを開けませんでした\n初期値を適用します\n");
//以下の初期値を適用
START_SOFT = 1; //001起動回数
PLAY_TIME = 0; //002起動時間
HIGHSCORE = 0; //003ハイスコア
}
else
{
//セーブファイルの読み込みが成功した時の処理
fread( &save_data, sizeof(save_data_t), 1, fp ) ; //ファイルからデータを読み込む
fclose( fp );
//構造体→関数
START_SOFT = save_data.start_soft; //001起動回数
PLAY_TIME = save_data.play_time; //002起動時間
HIGHSCORE = save_data.highscore; //003ハイスコア
}
//モニタリング用:ソフトを立ち上げた時のセーブファイルの数値を表示
printfDx("ソフトを立ち上げた時の数値\n起動回数:%d\n起動時間:%d\nハイスコア:%d\n",
START_SOFT, PLAY_TIME, HIGHSCORE);
}
//セーブの処理
void Savedata_Save()
{
char *name = "save_data.dat"; //ファイルの場所
FILE *fp;
save_data_t save_data;
//関数→構造体
save_data.start_soft = START_SOFT; //001起動回数
save_data.play_time = PLAY_TIME; //002起動時間
save_data.highscore = HIGHSCORE; //003ハイスコア
//セーブファイルが作成される
fp = fopen( name, "wb" );
fwrite( &save_data, sizeof(save_data_t), 1, fp ) ;
fclose( fp );
}
//--------------------------------------------------------------------------------------------
上のロードとセーブの処理を、「main.cpp」で、
Savedata_Load();
↓(ループに入る手前で読み込み)
メインのループ処理
↓(ループ抜けてソフトを終了する手前)
Savedata_Save();
と処理させる。
//---------------------------------------------------------------------
最初、構造体を別の.cppファイルから読ませてセーブファイルの数値を利用した処理に使おうとしてたのですが、
構造体の利用方法が判ってないせいかエラーばかり出てしまって結局エラーが無くなることがなかったのと、
思った数字にならないという状態が続き、無い知恵をフルに搾って上のように
構造体と似た名前のint関数を用意して、
読み書きの時にわざわざ変換し合うような上の書き方にしたらエラーも出さずに、
ファイルも読み込みと書き込みが出来て中身も変な数字にならずに目的の数値を保持したまま動作し、
セーブファイルの値を持った関数を別の処理に利用もエラー無しに出来るようになりました。
目的通りに動くようになったのですが、本当に正解なのか?いずれ問題を起こす要因を持ってるのではないか?とか、
プログラミングのことをよく知らないからか、とても不安に感じてしまいます。
すいません上手く説明出来なくて長々と書いてしまったのですが、
端的な質問にすると、「エラーなく動いてればこれでも良い」ということで解釈してしまっても大丈夫なんでしょうか?