簡単なラノベゲームでRPGを作ってるのですが、5体のモンスターが出てきます。
戦闘データ(主人公のHP)をセーブして、ロードをしたら途中からの戦闘データを呼び出すのには、どうしたらいいでしょうか?
例えば2体目のモンスターを倒したあとにプログラムを閉じて、ゲームを開き直して再度実行したら
次が3体目のモンスターの出現になってHPも前のデータを引き継いで再度実行といった具合です。
できれば具体的なプログラムの組み方も教えてくれるとありがたいです。
セーブとロード
Re: セーブとロード
補足説明
構造体にてキャラのデータは保存
主人公は名前だけ入力
データはdatファイルで16進数で保存
どうしたら途中のデータを呼び出せるのかがわからない
構造体にてキャラのデータは保存
主人公は名前だけ入力
データはdatファイルで16進数で保存
どうしたら途中のデータを呼び出せるのかがわからない
Re: セーブとロード
セーブと
ロード
みたいな感じで出来ているいるのではないかなと想像はします。具体的にどのようなコードか提示していただけると分かりやすいとおもいます。それとHPの意味(専門用語?)を教えてくれると有り難いです。
#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
Re: セーブとロード
HPとは、『ヒットポイント』と言い簡単に言うと体力ですhttp://detail.chiebukuro.yahoo.co.jp/qa ... 0108569675です。
Re: セーブとロード
#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: セーブとロード
セミコロンのかわりに無駄にコンマ演算子を使ってしまった、ということですね。ユナ さんが書きました:あ、33行目ミスってます
コンパイルは通りますね。
こんなことよりfopen()の戻り値をチェックしていないことの方がよくないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)