投稿
はるち haruchi0717
はじめまして プチコンで文字だけのRPGを作っています 画像のないWizardryのような感じです ゲームのプレイデータをセーブする機能を付属したいのですが、どのような方法が現実的でしょうか? ちなみにマップ画面などはなく、ゲームブックのように文字のみで展開する内容のRPGです
8そうだね
プレイ済み
返信[1]
親投稿
セーブには二つの方法があって、ひとつは文字列、もう一つは配列になります。 扱う(セーブする)データが数字だけであれば配列でやるのが楽かなと思います。ただ文字列を含む場合は、配列だけでやろうとすると文字列を数値化して配列にいれる必要が出てくるので、少しやっかいになります。 逆に文字中心なら文字列を使う。また数値も文字に変換するのは楽なので全部文字にしてしまうという方法もあります。ただこの場合に問題になるのはセーブは楽なのですが、ロードの際は文字列を分解して元の変数に戻す作業が必要になるので、その辺がややっこしく感じるかもしれません。 どちらも一長一短なのとセーブするデータの性質によって変わってきそうな気がしますね。
0そうだね
プレイ済み
返信[2]
親投稿
はるち haruchi0717
>でんぺんさん 解答ありがとうございます 保存したいデータは文字と数字の複合です (キャラの名前やHP、MP、持っているアイテムや、装備の有無などです) おそらく文字データの方が多くなると思います その場合はDATという形式にて保存するのが望ましい(らしい)ということまでは判りました 後はやはり勉強あるのみですね
0そうだね
プレイ済み
返信[3]
親投稿
文字が多いならTXT形式ですよ〜。配列(数値のみ)ならDATです。 あとTXT形式はテキストなのでLOADでプログラムスロットにも読み込めて中身が確認しやすいというのがあります。DATの場合はそういう手段がないのでプログラムで表示する必要があるし、なにもしなければ数字の羅列になりますしね。 複合したデータをどうするかというのはまだスタンダードな方法が提示されているわけではないんですよね…。 僕は全てのデータを配列にして扱ったことはあります。 サンプル的なものを用意する事も考えているんですが、どういう感じが使いやすく汎用的かなと思うと迷ってしまう感じですね。
0そうだね
プレイ済み
返信[4]
親投稿
けい kei0baisoku
そのうち自分で汎用関数を作ってみようかなと思っていたのですが、 VAR("変数名")=値 でセットできるのを利用して、変数名と値をセットで文字列保存しておくと、保存と復元が汎用的に扱えるような気がしてます(コータさん案より)
1そうだね
プレイ済み
返信[5]
親投稿
はるち haruchi0717
返答ありがとうございます あたしはBASICは素人で、まだまだ探りながらなのでとても助かります DATよりも、TXTだということを教えて頂けただけでも大きな収穫でした 自分で調べて試行錯誤しないと身に付かないと思いながら、このコミュニティの存在を知って助けを求めてしまいました セーブ機能の作り方はまだまだチンプンカンプンですが、諦めずに頑張ります また、よろしければ御教授ください
0そうだね
プレイ済み
返信[6]
親投稿
はるち haruchi0717
>けいさん ありがとうございます 今の自分にはVALの使い方の部分しかわかりませんが、こちらの質問に興味を持って頂けたことが嬉しいです ありがとうございます
0そうだね
プレイ済み
返信[7]
親投稿
けいさんの言うように汎用的に作る場合は、VAR("変数名")=値を使うのがいいと思ってるのですが、初心者の方にオススメ出来る方法ではない(というか敷居が高くて分かりにくいと思う)ので、そういうのを用意してあげるしかないかなと思っていたりはしますねー…。 そのうち僕やけいさん、または他の方が作ってくれるような気もするんで、それまで待って利用するのもとりあえず手かもしれません(^^;
0そうだね
プレイ済み
返信[8]
親投稿
はるち haruchi0717
>でんぺんさん 他の方が何らかの手段を構築してくださると、正直ありがたいですね とは言うものの、自分でも何とかできないかなぁとか、背伸びしたことも考えていたり... 簡単に実装出来ると思っていたのが恥ずかしいです
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
>はるちさん いえ、とんでもないです。 すみません私の書いた方法、プログラム自体もそれほど慣れてない方ですとちょっと敷居が高いですね。 シンプルな方法で行けそうならそれで作り上げてで大丈夫だと思います。 汎用的な方法は、そのうち誰かが作ってくれるでしょう。たぶん(^O^)
0そうだね
プレイ済み
返信[10]
親投稿
はるち haruchi0717
>けいさん いえいえ、とんでもないです やはり自分で四苦八苦したほうが身につくのだろうと思います 今回の件は自分の力量ではあまりに見当もつかなかったので、藁をも掴む気持ちでこちらに書き込みしてみました 色々と頂けたコメントの中にたくさんのヒントがあるのだと思います まずはそれを見つけられるように勉強しないといけないですね
2そうだね
プレイ済み
返信[11]
親投稿
汎用的とかにこだわらないのであれば、文字列で保存するとしたら、 SAVE 保存する命令 STR$ 数値を文字にする命令 CHR$ 改行コードなどを入れたい場合は使う命令 辺りを使えば、とりあえずセーブする事は出来るようになるんじゃないかと思います。 ただロードの際には文字列を分解する必要があるので、 MID$ 部分文字列を取り出す命令 INSTR 文字列の中から指定した文字の位置を取得する命令 VAL 文字列を数値に変換する命令 LOAD ファイルからロードする命令 辺りを使って変数に戻してやる必要が出てくる感じです。 文字列操作に詳しければそんなに難しくないのですが、文字列を色々と操作したことがない感じだと難しく感じるかなってところです。
0そうだね
プレイ済み
返信[12]
親投稿
ちなみに文字列で保存する場合、各変数の値を文字列にするときに区別するためになにかで区切る必要があって、それは変数の文字列内に使われてない文字にしないといけません。 CSV形式などの場合は,(カンマ)で区切るなどしますが、カンマが使われる可能性があるなら改行コードなどで区切るのがいいんじゃないかと思います。(改行を含む文字列だと困りますが…)
0そうだね
プレイ済み
返信[13]
親投稿
はるち haruchi0717
>でんぺんさん わざわざありがとうございます このような解答を頂けたことに感謝します 文字列操作系について、自分が勉強不足であることを痛感しました 簡単な命令を無理矢理組み合わせて、無駄に冗長なプログラムをやっとこさ走らせているような状況ですので、とても助かります やはり手数は多いに越したことはないですよね ありがとうございます
0そうだね
プレイ済み
返信[14]
親投稿
いえいえ。とりあえず今はヒントしか出す事が出来ませんが頑張ってください!
0そうだね
プレイ済み
返信[15]
親投稿
カイ Chibi-Moz
私は DATA START (認識用文字列) 10 ABC 125 の用に改行で区切ってSAVEして、LOADするときは一行毎に処理するようにしてます。 文字列配列を使って、一行=1要素にするようにプログラムを書くとPOP/PUSHを使って簡単にセーブデータをいじることができるので、個人的にはその方法がお気に入りです。
0そうだね
プレイ済み
返信[16]
親投稿
はるち haruchi0717
>でんぺんさん とんでもないです とても助かります >カイさん そのような方法もあるのですね 正直、よく理解出来ていませんが、頑張って勉強してみようと思います ありがとうございます
0そうだね
プレイ済み