ゲームの状態(プロファイル)を保存するために最もよく使用される方法やアルゴリズム、データベーステキストファイル、暗号化の方法、関連するものは何ですか。
Caesar IVがmySQLを使用しているのを見ました。
助言がありますか。
ゲームの状態(プロファイル)を保存するために最もよく使用される方法やアルゴリズム、データベーステキストファイル、暗号化の方法、関連するものは何ですか。
Caesar IVがmySQLを使用しているのを見ました。
助言がありますか。
回答:
ほとんどの場合、プロプライエタリ(バイナリ)形式で行われます。使用するゲーム状態構造体から各変数をファイルに書き込むか、そのファイルを構造体のインスタンスに読み込みます。たとえば、C ++では、オブジェクトをバイト配列のように扱い、ファイルにfwrite()するか、ファイルからfread()してオブジェクト形式にキャストし直すことができます。
Javaまたは別の言語を使用している場合、タスクを本当に簡単にするためにシリアル化を使用することを選択できます。Javaの説明はこの回答の下部にあります。他の言語(C ++よりも高レベル)には、独自のシリアル化ライブラリまたは組み込み関数も必ずあります。これらは使用することを選択する必要があります。シリアル化ルーチンがどれほど効率的でなくても、特にゲームの状態をまったく大きくすべきではない場合は特に、最近のハードドライブのスペースは安価であり、書き込みや保守ができなくなります。、独自のシリアル化ルーチンをする。
MySQL を絶対に使用しないでください(このレビューの最初の文を読んでください)。何らかの理由でリレーショナルデータベースが本当に必要な場合は、SQLiteを使用してください。これは軽量のデータベースシステムであり、単一のデータベースファイルに存在します。しかし、ほとんどのゲームでは、リレーショナルデータベースは使用できません。それらを使用しようとする企業は通常、真のリレーショナルデータベースではなく、キーと値のルックアップテーブルとして使用します。
ローカルディスクファイルのあらゆる種類の暗号化は難読化のみです。ハッカーは、プログラムが復号化した直後にデータを盗聴します。私は個人的にその種のことに反対しています、特にワンプレイヤーゲームでは。私の見解では、ゲームの所有者(顧客に支払いをする、気にしないでください)は、必要に応じてゲームをハッキングすることを許可されるべきです。場合によっては、コミュニティの感覚を高めることができます。また、ゲーム用に「mod」を開発して、より多くの顧客を獲得できます。思い浮かぶ最も最近の例は、最近リリースされたMinecraft mod のポータルです。インターネット上のゲーマーニュースサイトで公開されており、Minecraftの売り上げを押し上げたに違いありません。
何らかの理由で、私と同じようにゲーム開発にJavaを使用することに夢中になっている場合は、Javaでのシリアル化について簡単に説明します。
すべてのゲーム状態データを1つのクラスに保持し、実装することでクラスをシリアル化可能にし、特別なインスタンス化された変数をクラスに混在させる場合
Serializable
はtransient
キーワードを使用し(一時オブジェクトはシリアル化されません)、ObjectOutputStream
ファイルへの書き込みとファイルObjectInputStream
からの読み取りに使用します。それでおしまい。
[field: NonSerialized]
シリアル化は他の回答のいくつかで言及されており、それが合理的な解決策であることに同意します。失敗する1つの方法はバージョン管理です。
ゲームをリリースすると、人々はそれをプレイし、セーブゲームを作成するとします。次に、後のパッチでバグを修正するか、いくつかの機能を追加します。単純なバイナリシリアル化メソッドを使用し、クラスにメンバーを追加すると、顧客がパッチをインストールしたときに、シリアル化が古いセーブゲームと互換性がない場合があります。
したがって、どのアプローチを使用する場合でも、ゲームを初めてリリースする前にこの問題を必ず考えてください!パッチを適用した後に最初からやり直す必要がある場合、顧客は満足しません。
これを回避する1つの方法は、各基本データタイプに、ゲームの各バージョンで保存およびロードするデータを把握できるほど賢いSave(version)およびLoad(version)メソッドを実装させることです。これにより、セーブゲームの後方互換性をサポートし、ユーザーが実行中のゲームよりも新しいバージョンからセーブゲームをロードしようとすると、正常に失敗します。
レベルの保存に使用するのと同じ形式を使用できる場合は、ボーナスです。
たとえば、Peggleのようなゲームには、最初のボードレイアウト、ボールの数、現在のスコア(最初のボードの場合は0)などがあります。保存したゲームはまったく同じ形式を使用できます。
同じ形式を使用する場合、セーブゲームとレベルロードでコードを共有できるため、作業が簡単になります。
非常に大きなマップファイルを使用するゲームの場合、セーブゲームにはマップファイルを参照によって含めることができます。初期レベルのファイルは同じことをするかもしれませんが、何らかの理由でキャラクターが同じ場所に戻ってきた場合、一部のNPCが死んでおり、すべての死体が横たわっている場合を除き、そのマップに戻るのも簡単になります以上。