海獣のTonyu@Wiki

セーブとロード

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
 「セーブはどうやるんですか? ロードはどうやるんですか?
そんな質問が、時折現れます。
おそらく昔の私と同じように、セーブやロードを特別なものだと思っているのでしょう。
しかーし! 『本当のセーブやロードというのは、そんなにすごいものじゃない』んです。

さて、それはどういうことなのか。そもそも、セーブ・ロードとは何なのでしょうか
国語辞典を引いてみると…。
 セーブ 1、節約 2、力を蓄えること
 ロード 1、道路、道
そう、セーブ&ロードとは、節約と道路のことなのです!!」








 -一時間後-
 「おお痛てて。
ちょっとふざけただけなのに、ひどいな~。ぼこ殴りじゃないですか。
はては、ハゲだの、なんだの…。
まったくもって非道だ!!

はい、上のは冗談です。
とりあえず、セーブとロードについては下のように考えてください。
 セーブ 保存
 ロード 読み込み
セーブはいいとして、ロードの定義についてはおや? と思う方も多いかと思います。
もしかしたら、英語辞書を開いても、国語辞典を開いてもこういう訳は載っていないかもしれません。
しかし、プログラムの話をしようというときにはこちらのほうが都合がいいのです。

てなわけで、話を進めます。
セーブをするとき、プログラムは何をしているのか。
それは、テキストを書いて保存しているのです。

では、ロードをするときは?
テキストを読み込んでいるのです。

つまり、セーブとロードというのは、単純なテキストのやり取りにすぎないわけです。
ってこれで分かる人も少ないですよね^^;

親しみのある例として、RPG的な能力値について考えましょう。
RPGの能力値として一般的なのは、HPとMPですね?
では、こんなキャラクターを用意したとします。
HP:10
MP:10
これが、このキャラクターのスターテスです。
これをセーブするとしたらどうすればいいのか?
セーブをする目的は、必要なときに必要なデータを取得できることです。
一度ゲームを終了させたとき、一度パソコンを再起動させたとき。
そんなときに、途中からゲームを再開できるようにするのがセーブ機能というものです。
それを実現するにはどうすればいいのか。
それは、外部にデータを保存すればいいのです。

外部にデータを保存するということは、一般にテキストで保存することによって実現します。
そこで、テキストには以下のような約束事を作ります。
約束
 1、一行目にはHPを記録する
 2、二行目にはMPを記録する
この約束事は、心の中に作るものです。
忘れてしまいそうな場合には何かに書き付けておきますが、プログラムとして指定することはありません。

そうしてこの約束の通りに保存をします。
多くのプログラミング言語で用意されている、テキストへの出力機能。
これを使ってHPの値である「10」と、MPの値である「10」をテキストに出力します。
テキストには以下のように出力されるはずです。すなわち、保存したテキストを開いた時には下のように書かれている状況を作るわけです。
*****以下がテキストの中身*****
10
10
*****ここまで*****

これがセーブというものです。
サンプルを作る暇がなかったために、言葉だけの説明になってしまい申し訳ありませんm(_ _)m
分かりづらいかとは思いますが、私の技量ではこの程度の説明が限界ですので、直接私にメールや掲示板で質問するか、他サイトや関連書籍で補完していただければ幸いです。

で、ロードはどうするのか。
ロードはセーブの際に心の中に作ったお約束である、
約束
 1、一行目にはHPを記録する
 2、二行目にはMPを記録する

を利用します。
まずは、テキストを読み込みます。普通、プログラミング言語には行ごとで読み込むことができる機能が存在します。その機能を利用すると、効率よく進めることができます。
そこで、一行目にはHPの数値が記録されているのです。
よって、一行目の値をHPを示す変数に代入します。
 
変数hp=一行目の値

二行目にはMPです。HPと同じようにして代入します。
 
変数mp=二行目の値


/****以下は多少小難しい話ですので、理解できる人だけ読んでください。
そういえば、Tonyuにおいては配列の重複ができません。
配列のデータの中に他の配列を入れることができないので、アイテム・特殊攻撃・基本データをそれぞれ別々の配列に保存してから後で配列の統合をしたりできないのでご注意ください。

セーブ・ロードってのはテキストデータを読み取ることなんですけど、能力値とかをいちいちテキストデータから読み込んでは書き込んで…なんてやってちゃいくら処理速度が速くてもやってられません。
そんなわけで、ロードされたデータは配列というデータに直されて、その配列上で処理されます。逆にセーブはこの配列のデータの中身を(配列でなくてもいいけど)テキストデータに書き込む…。
これは、ほんのそれを指示した一時にしか実行されない処理です。
ここまで****/

特にロードについてはひどく雑な解説になってしまいましたが、これが少しでもプログラムを組む際の手助けになれば幸いです。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー