セーブとロード

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

セーブとロード

#1

投稿記事 by 例のあの人 » 7年前

簡単なラノベゲームでRPGを作ってるのですが、5体のモンスターが出てきます。
戦闘データ(主人公のHP)をセーブして、ロードをしたら途中からの戦闘データを呼び出すのには、どうしたらいいでしょうか?

例えば2体目のモンスターを倒したあとにプログラムを閉じて、ゲームを開き直して再度実行したら
次が3体目のモンスターの出現になってHPも前のデータを引き継いで再度実行といった具合です。

できれば具体的なプログラムの組み方も教えてくれるとありがたいです。

例のあの人

Re: セーブとロード

#2

投稿記事 by 例のあの人 » 7年前

補足説明

構造体にてキャラのデータは保存

主人公は名前だけ入力

データはdatファイルで16進数で保存

どうしたら途中のデータを呼び出せるのかがわからない

Math

Re: セーブとロード

#3

投稿記事 by Math » 7年前

ぐ、ぐたいてきな...[ コードが]...み、みたい.....~ホラーノベル風~

ポニョ

Re: セーブとロード

#4

投稿記事 by ポニョ » 7年前

セーブと

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
//設定構造体
typedef struct {
    int width;          //画面幅
    int height;         //画面縦
    bool isFullScreen;  //フルスクリーン表示するか
}config_t;
 
int main()
{
    config_t config;
    config.width = 640;
    config.height = 480;
    config.isFullScreen = true;
	FILE *fp = fopen("d:/dat/config.dat","wb");
    fwrite(&config, sizeof(config_t), 1, fp);
    fclose(fp);
}
ロード

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
//設定構造体
typedef struct {
    int width;          //画面幅
    int height;         //画面縦
    bool isFullScreen;  //フルスクリーン表示するか
}config_t;
 
int main()
{
    config_t config;
	FILE *fp = fopen("d:/dat/config.dat","rb");
    fread(&config, sizeof(config_t), 1, fp);
    fclose(fp);
    printf("%dx%d, フルスクリーン=%s", config.width, config.height, config.isFullScreen?"ON":"OFF");
}

//実行結果
//640x480, フルスクリーン=ON
みたいな感じで出来ているいるのではないかなと想像はします。具体的にどのようなコードか提示していただけると分かりやすいとおもいます。それとHPの意味(専門用語?)を教えてくれると有り難いです。

Math

Re: セーブとロード

#5

投稿記事 by Math » 7年前

HPとは、『ヒットポイント』と言い簡単に言うと体力ですhttp://detail.chiebukuro.yahoo.co.jp/qa ... 0108569675です。

ユナ

Re: セーブとロード

#6

投稿記事 by ユナ » 7年前

コード:

 
#include <stdio.h>
#include <string.h>

static struct {
	char *date[3];		//主人公の名前 HP 残りモンスター数
}kya_date;

int main( void ){

	FILE *fp;
	bool mon_del = false; //モンスターを倒したらtrue にする
	char str[1024];
	int i = 0;

	//ロード部分
	fp = fopen( "save.dat" , "r" );
	fgets( str , 1024 , fp );
	kya_date.date[ 0 ] = strtok( str , " " );
	for( i = 1; i < 3; i++ ){
		kya_date.date[ i ] = strtok( NULL , " " );
	}
	fclose(fp);

	//構造体に入ったデータを16進数から10進数に戻す(中略)
	//戦闘中のHP低下処理(中略) HPはこの時はint型にして処理後、文字列型に戻してdate[1]に格納
	//戦闘終了後(中略) 残りのモンスター数をint型にして減らしたら、文字列型に戻してdate[2]に格納 変数mon_del を trueにする
	//そのほかいろいろ(中略)

	//モンスター倒した時セーブする
	if( mon_del == true ){
		//構造体に入っているデーターを10進数から16進数にする(中略)
		fp = fopen( "save.dat" , "w" ) ,
		fprintf( fp , "%s %s %s", kya_date.date[0] , kya_date.date[1] , kya_date.date[2] );
		fclose(fp);
		mon_del = false;
	}
}


こんな感じかな?

ユナ

Re: セーブとロード

#7

投稿記事 by ユナ » 7年前

あ、33行目ミスってます

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: セーブとロード

#8

投稿記事 by みけCAT » 7年前

ユナ さんが書きました:あ、33行目ミスってます
セミコロンのかわりに無駄にコンマ演算子を使ってしまった、ということですね。
コンパイルは通りますね。
こんなことよりfopen()の戻り値をチェックしていないことの方がよくないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ユナ

Re: セーブとロード

#9

投稿記事 by ユナ » 7年前

save.dat がないとエラーが出るからですね
ちゃんと用意してねって事で・・・・

閉鎖

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