合計 昨日 今日

セーブとロード

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: 例のあの人
[URL]
Date: 2017年1月07日(土) 00:09
No: 1
(OFFLINE)

 セーブとロード

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

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

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

Name: 例のあの人
[URL]
Date: 2017年1月07日(土) 00:41
No: 2
(OFFLINE)

 Re: セーブとロード

補足説明

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

主人公は名前だけ入力

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

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

Name: Math
[URL]
Date: 2017年1月07日(土) 09:45
No: 3
(OFFLINE)

 Re: セーブとロード

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

Name: ポニョ
[URL]
Date: 2017年1月07日(土) 18:40
No: 4
(OFFLINE)

 Re: セーブとロード

セーブと
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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);
}

ロード
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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の意味(専門用語?)を教えてくれると有り難いです。

Name: Math
[URL]
Date: 2017年1月07日(土) 19:07
No: 5
(OFFLINE)

 Re: セーブとロード

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

Name: ユナ
[URL]
Date: 2017年1月14日(土) 11:28
No: 6
(OFFLINE)

 Re: セーブとロード

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
#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;
    }
}


こんな感じかな?

Name: ユナ
[URL]
Date: 2017年1月14日(土) 11:48
No: 7
(OFFLINE)

 Re: セーブとロード

あ、33行目ミスってます

Name: みけCAT
[URL]
伝説なるハッカー(666,338 ポイント)
Date: 2017年1月14日(土) 12:27
No: 8
(OFFLINE)

 Re: セーブとロード

ユナ さんが書きました:あ、33行目ミスってます

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

Name: ユナ
[URL]
Date: 2017年1月15日(日) 16:33
No: 9
(OFFLINE)

 Re: セーブとロード

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[23人]