ページ 1 / 1
セーブとロード
Posted: 2017年1月07日(土) 00:09
by 例のあの人
簡単なラノベゲームでRPGを作ってるのですが、5体のモンスターが出てきます。
戦闘データ(主人公のHP)をセーブして、ロードをしたら途中からの戦闘データを呼び出すのには、どうしたらいいでしょうか?
例えば2体目のモンスターを倒したあとにプログラムを閉じて、ゲームを開き直して再度実行したら
次が3体目のモンスターの出現になってHPも前のデータを引き継いで再度実行といった具合です。
できれば具体的なプログラムの組み方も教えてくれるとありがたいです。
Re: セーブとロード
Posted: 2017年1月07日(土) 00:41
by 例のあの人
補足説明
構造体にてキャラのデータは保存
主人公は名前だけ入力
データはdatファイルで16進数で保存
どうしたら途中のデータを呼び出せるのかがわからない
Re: セーブとロード
Posted: 2017年1月07日(土) 09:45
by Math
ぐ、ぐたいてきな...[ コードが]...み、みたい.....~ホラーノベル風~
Re: セーブとロード
Posted: 2017年1月07日(土) 18:40
by ポニョ
セーブと
コード:
#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の意味(専門用語?)を教えてくれると有り難いです。
Re: セーブとロード
Posted: 2017年1月07日(土) 19:07
by Math
Re: セーブとロード
Posted: 2017年1月14日(土) 11:28
by ユナ
コード:
#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: セーブとロード
Posted: 2017年1月14日(土) 11:48
by ユナ
あ、33行目ミスってます
Re: セーブとロード
Posted: 2017年1月14日(土) 12:27
by みけCAT
ユナ さんが書きました:あ、33行目ミスってます
セミコロンのかわりに無駄にコンマ演算子を使ってしまった、ということですね。
コンパイルは通りますね。
こんなことよりfopen()の戻り値をチェックしていないことの方がよくないでしょう。
Re: セーブとロード
Posted: 2017年1月15日(日) 16:33
by ユナ
save.dat がないとエラーが出るからですね
ちゃんと用意してねって事で・・・・