現在作成しているゲームで以下のようなセーブ機能を作ったのですが(一部省略)
void save_file() { //ステージをセーブする
int data[10]; //セーブデータ構造体
DATEDATA ddata; //日付と時間の格納用変数定義
GetDateTime(&ddata); //現在時刻を取得
data[0] = ddata.Year;
data[1] = ddata.Mon;
data[2] = ddata.Day;
data[3] = ddata.Hour;
data[4] = ddata.Min;
data[5] = map_edit.pass;
data[6] = map_edit.cx;
data[7] = map_edit.cy;
data[8] = (map_edit.cx + map_edit.cy + map_edit.pass + ddata.Min) / 2;
data[9] = map_edit.back;
MakeFolder("EditStage");
FILE *fp;
errno_t err;
err = fopen_s(&fp, map_edit.f_path, "wb");
fwrite(data, sizeof(int), 10, fp);
fwrite(enemy_edit.flag, sizeof(int), ENEMY_MAX, fp);
fwrite(enemy_edit.kind, sizeof(int), ENEMY_MAX, fp);
fclose(fp);
}
軽く圧縮をかけてから保存したいと考えています。
どのようにすればいいのか教えてください。
私が現在考えているのはfweite関数のファイルに出力するのではなく
バイナリになった文字列として返してくれる関数を使用して(あるのかどうかわかりませんが)
char型などに一度格納し同じ文字列を短縮してからファイルに書き出すというものです。
ただググっても上の様な関数は出てこなかったのでどうすればいいのかもわからずここで質問させてもらいました。
圧縮の方法は以下の様な方法を考えています
↑DXライブラリ管理人 さんが書きました: RRRRRRABDDDDDGG
という文字列があったとします。
これに『ランレングス圧縮』という圧縮をかけると次のようなデータになります。
RR6ABDD5GG2
ここでは
同じ文字が2回以上続いたらその部分を
[2回以上続いた文字][2回以上続いた文字][続いた数]
という情報に置き換える
...
ttp://dxlib.o.oo7.jp/lecture/Press/press.html