「ゲームプログラミング」の版間の差分

削除された内容 追加された内容
870 行
== セーブ・ロード・データベース ==
=== セーブ機能とロード機能の作り方 ===
ゲームでもシリアライズ機能が必要なことは多いだろう。数値(HPなどの各種パラメータ現在値)や文字列(例えば、プレイヤーの作成したキャラクターの名前)や現在地やフラグ状況などなど、セーブの機能は欲しい。一番簡単な方法は、C言語の fopen 関数のテキストファイル書き込み機能で、テキストファイルとしてセーブすることだろう。
 
Windows API には CreateFile関数 があるが、テキストファイルでの素朴なセーブは一番簡単で単純なセーブ法だろう。そしてテキストファイルを読み込んでプログラムに各種変数を配置して、ロードとする。
 
書き込みとしては、一番単純なC言語記法では、fprintf ですかね。C++としての書き込みをしてもいいし、読み込むのも、一番基本的な方法で。基本Cだとしたら fscanf で、この関数でテキストの数値も変数として読み込めるはずです。場合によっては atoi関数 で文字列→数値の変換をすることもありますかね
 
基本的にデータファイルは、OS もアプリケーションも、テキストファイルとバイナリファイルの2分類で考えるでしょう。でも厳密にはテキストファイルだってバイナリの集まりなんですが、ゲーム業界に限らず慣用的にテキストを扱うファイルだけ特別視してい考えていいがある
 
そして多少それらしいデータを作りたいときは、バイナリファイルで作るという事になるでしょう。
 
バイナリファイルでもデータとしてのファイルと、OS が機械語または何らかの仮想的な機械語として扱う実行ファイルがある。それらのバイナリは種類に応じて多くは冒頭にファイル識別子の情報があるだろうし、OS や アプリケーション側で工夫を凝らして、特定の条件を満たす場合しか動作しないようにしているだろう。そしてバイナリファイルを扱うときは、セキュリティの安全性も考慮するだろう。
 
基本的にプログラム側は何でもありだが、識別子の判別その他、ある程度様々な考慮をしないと、困った事態が起こり、プログラマーが責任を問われることも起こるかもしれない。
 
まあその時はいつものように口先だけで謝り、それでも許してくれなかったら、腹をかっ割いて死んでお詫びすれば、世間の人たちは美事な武士道精神と言って、口々に褒め称えてくれるだろう^^。←もちろんこれは冗談^^;;;。
 
市販のパソコン用ゲームや同人ゲームでは、テキストファイルではなくバイナリでデータ保存するゲームの方が圧倒的に多いだろう。その方がそれらしいしかっこがつく。ゲーム開発ツール側自体も、そうなっている場合が多い。RPGツクールもウディタも、セーブデータの形式はバイナリ。
 
テキストデータは基本エディタで開けるが、バイナリデータも内容によっては結構ぐちゃぐちゃの状態で開ける。バイナリデータはバイナリエディタで開ける。バイナリエディタのリードオンリーモードやバイナリビューアみたいなものがあれば、データを壊さないで結構安全にデータ調査できる。
 
データ内容を秘匿したければ、バイナリ化だけではなく、暗号化も必要になるかもしれない。
 
=== 機能の整備 ===
セーブ&ロード機能の実装時には、まずセーブ機能から作るのがやりやすいという。