for文でマップの最大数の分だけ繰り返してその3種類のデータを1つのバイナリファイルに保存します。
要するにバイナリデータに「マップ1数値」→「マップ1高さ」→「マップ1横幅」→「マップ2数値」→「マップ2高さ」…と保存しているのです。
読み込むときも全く同じで、マップ1数値から読み込んでいきます。
そこで、一度バイナリファイルにマップのデータを保存した後に、例えばステージ2の高さを変えて、マップデータを読み込もうとすると停止したり、
他のマップが崩れたりしてしまいます。
このように、一度データを保存した後に、マップの高さや横幅を変えても、他のマップに影響しないようにするにはどうすれば良いでしょうか?
MapdataSelectがマップの数だけある構造体配列です。MapMAXはマップの最大数でる。
//ファイルを出力
if(EditMode == 1 && Keyboard_Get( KEY_INPUT_P ) == 1){
FILE *fp = fopen( "MapData.dat", "wb" );
for(int i = 0; i < MapMAX; i++)
{
fwrite( MapdataSelect[i].Map, sizeof( MapdataSelect[i].Map), MapdataSelect[i].Width* MapdataSelect[i].Height, fp ); //出力
fwrite( & MapdataSelect[i].Width, sizeof( MapdataSelect[i].Width), 1, fp ); //出力
fwrite( & MapdataSelect[i].Height, sizeof( MapdataSelect[i].Height), 1, fp ); //出力
}
fclose( fp );//ファイルを閉じる
PlaySoundMem( EditExportSE, DX_PLAYTYPE_BACK ); // 効果音を再生する
Map_Update( Player );//マップ更新
}
//取り込み
if(EditMode == 1 && Keyboard_Get( KEY_INPUT_O ) == 1){
FILE *fp = fopen( "MapData.dat", "rb" );
for(int i = 0; i < MapMAX; i++)
{
fread( MapdataSelect[i].Map, sizeof(MapdataSelect[i].Map), MapdataSelect[i].Width*MapdataSelect[i].Height, fp );
fread( &MapdataSelect[i].Width, sizeof(MapdataSelect[i].Width), 1, fp );
fread( &MapdataSelect[i].Height, sizeof(MapdataSelect[i].Height), 1, fp );
}
fclose( fp );
PlaySoundMem( EditImportSE, DX_PLAYTYPE_BACK ); // 効果音を再生する
Map_Update( Player );//マップ更新
}