セーブ、ロードを行う関数を作ったのですが
//データのセーブ
void Save( int (*Map)[200][200],int(*IntNum)[200][200])
{
FILE *fp ;
fp = fopen( "Map.dat" , "wb" ) ;
if( fp == NULL ) return ;
// データの書き出し
for(int i=0;i<200;i++) //これだと200*200*2*5=40万も保存しなければいけない
for(int j=0;j<200;j++)
for(int k=0;k<5;k++){
fwrite( &Map[k][j][i] , sizeof(Map[k][j][i] ) , 1 , fp ) ; //このMapと
fwrite( &IntNum[k][j][i] , sizeof(IntNum[k][j][i] ) , 1 , fp ) ; //Intnumを保存したい
}
// ファイルを閉じる
fclose( fp ) ;
}
// ロード
void Load(int (*Map)[200][200],int (*IntNum)[200][200])
{
FILE *fp ;
fp = fopen( "Map.dat" , "rb" ) ;
if( fp == NULL )
{
for(int i=0;i<200;i++)
for(int j=0;j<200;j++)
for(int k=0;k<5;k++){
Map[k][j][i];
IntNum[k][j][i];
}
}
else
{
// データの読み込み
for(int i=0;i<200;i++)
for(int j=0;j<200;j++)
for(int k=0;k<5;k++){
fread( &Map[k][j][i] , sizeof( Map[k][j][i] ) , 1 , fp ) ;
fread( &IntNum[k][j][i] , sizeof( IntNum[k][j][i] ) , 1 , fp ) ;
}
fwrite( &boxXmax , sizeof( boxXmax ) , 1 , fp ) ;
fwrite( &boxYmax , sizeof( boxYmax ) , 1 , fp ) ;
// ファイルを閉じる
fclose( fp ) ;
}
}
上記のはうまくいったのですが、これだとファイルサイズがばかでかくなってしまうので改良しようと思い以下のように変えました。
//データのセーブ
void Save( int (*Map)[200][200],int(*IntNum)[200][200],int boxXmax,int boxYmax )//boxXmax,boxYmaxは横幅、縦幅それぞれの最大値です
{
FILE *fp ;
fp = fopen( "Map.dat" , "wb" ) ;
if( fp == NULL ) return ;
// データの書き出し
for(int i=0;i<boxXmax;i++)
for(int j=0;j<boxYmax;j++)
for(int k=0;k<5;k++){
fwrite( &Map[k][j][i] , sizeof(Map[k][j][i] ) , 1 , fp ) ; //このMapと
fwrite( &IntNum[k][j][i] , sizeof(IntNum[k][j][i] ) , 1 , fp ) ; //Intnumと
}
fwrite( &boxXmax , sizeof( boxXmax ) , 1 , fp ) ; //boxXmaxと
fwrite( &boxYmax , sizeof( boxYmax ) , 1 , fp ) ; //boxYmaxを保存したい
// ファイルを閉じる
fclose( fp ) ;
}
// ロード
void Load(int (*Map)[200][200],int (*IntNum)[200][200],int *boxXmax,int *boxYmax)
{
FILE *fp ;
fp = fopen( "Map.dat" , "rb" ) ;
if( fp == NULL )
{
for(int i=0;i<200;i++)
for(int j=0;j<200;j++)
for(int k=0;k<5;k++){
Map[k][j][i];
IntNum[k][j][i];
}
}
else
{
// データの読み込み
for(int i=0;i<200;i++)
for(int j=0;j<200;j++)
for(int k=0;k<5;k++){
fread( &Map[k][j][i] , sizeof( Map[k][j][i] ) , 1 , fp ) ;
fread( &IntNum[k][j][i] , sizeof( IntNum[k][j][i] ) , 1 , fp ) ;
}
fwrite( &boxXmax , sizeof( boxXmax ) , 1 , fp ) ;
fwrite( &boxYmax , sizeof( boxYmax ) , 1 , fp ) ;
// ファイルを閉じる
fclose( fp ) ;
}
}
すると、ファイルのサイズは小さくなったのですが今度はうまく読み込んでくれなくなってしましました。
配列のサイズが違うのがおかしいのかも..?とかいろいろ考えてみたのですが、なかなか解決できなかったので質問させていただきました。
わかりにくくて申し訳ないのですが、よろしくおねがいします。