セーブデータの作り方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぽち

セーブデータの作り方

#1

投稿記事 by ぽち » 13年前

こんばんは。

softyaさんの講座を元にしています。
http://dixq.net/forum/blog.php?u=114&sd=a&c=2&start=50

前回、セーブ・ロードの前段階まで進めることができました。
http://dixq.net/forum/viewtopic.php?f=3&t=12087

そこで、実際にセーブ(書き込み)の機能を実装しようと思い、
a.datファイルをバイナリエディタで確認してみたところ、数値が違うものでした。

menu.cpp

コード:

static int save(PlayerParam_t *playerParam)
{
	FILE *fp;
	if((fp = fopen("a.dat", "wb")) == NULL)
		return 0;

	fwrite( &playerParam, sizeof(playerParam), 1, fp ) ;    
	
	fclose(fp);
	return 1;
}
1つずつやってみようと思い、下記を作ってみたところ、
ちゃんと上がったレベルが入っていました。

コード:

static int save(PlayerParam_t *playerParam)
{
	PlayerParam_t test = { playerParam->level };

	FILE *fp;
	if((fp = fopen("a.dat", "wb")) == NULL)
		return 0;

	fwrite( &test, sizeof(test), 1, fp ) ;    
	
	fclose(fp);
	return 1;
}
まず、まとめて書き込む場合、何がいけないのでしょう。


それと、つづきからを選択した場合のロード(読み込み)も考えてみたのですが、
ゲームの方に反映されていませんでした。

main.cpp

コード:

static int menu_save(PlayerParam_t *playerParam)
{
	PlayerParam_t test = { };

	FILE *fp;
	if((fp = fopen("a.dat", "rb")) == NULL)
		return 0;
 
	fread( &test, sizeof(test), 1, fp);
	
	fclose(fp);
	return 1;
}
どこがいけないのでしょうか。
ご指導くださると助かります。よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: セーブデータの作り方

#2

投稿記事 by h2so5 » 13年前

まず上の書き込みについてですが、

コード:

    fwrite( &playerParam, sizeof(playerParam), 1, fp ) ;    
これだとplayerParamそのものを書きこんでしまっています。
playerParamはポインタですからデータ本体ではありません。

正しくはこうなります

コード:

    fwrite( playerParam, sizeof(PlayerParam_t), 1, fp ) ;    
次に読み込みについてですが、testというローカル変数に書きこんでしまっては意味がありません。
読み込み先にしたいのは引数にあるplayerParamですよね?

閉鎖

“C言語何でも質問掲示板” へ戻る