これは非常に複雑な問題になる可能性がありますが、あなたの場合、ゲームがより複雑になるにつれて、単純なものから始めて、そこから始めることをお勧めします。基本的に、確率はシリアル化として知られています。または、後でメモリに読み戻すことができるように、アプリケーションのメモリをディスクまたはデータベースに書き込みます。
これを行うには、オブジェクトをXMLやJSON、またはその他のバイナリファイル形式に変換するなど、多くの手法があります。たとえば、ビットマップファイルは、メモリ内の一部の画像構造のシリアル化された形式です。
C#(XNA?)以外のゲームを作成するために使用しているテクノロジはよくわかりませんが、基本的には、環境で使用できるファイルシステムAPIを使用して、シリアル化されたオブジェクトをそこに書き込みたいと考えています。あなたの質問に基づいて、これを容易にするためにあなたのゲームのいくつかを再設計する必要があるかもしれません。一般に、ゲームの状態を「信頼できる唯一の情報源」で表現することをお勧めしますが、そうでない場合でも、おそらくそれを理解することができます。
だからここに私が取るステップの大まかな概要があります...
シリアル化
- ゲームの状態を取得し、より単純でシリアル化可能なオブジェクトを出力するルーチンを作成します。
- これらの単純なオブジェクトには、ほとんどの場合、機能のないすべてのパブリックゲッター/セッタープロパティがあります。
- 後でゲームの状態を再作成するために必要な最小限の情報のみを書き出すようにしてください。
- たとえば、チェスがゲームの状態をどのようにシリアル化するかをご覧ください:チェス表記
- それらのオブジェクトをJSONにシリアル化します(簡単で柔軟性があるため)
- そのjsonをディスクに書き込みます。
- ここではおそらくコンベンションベースのアプローチを使用します。
- 「Saves\game1.json」などは、最初のゲームスロットの状態です。
- 正しい名前のファイルの存在に基づいて、保存されたゲームを推測するだけです。
デシリアライズ
- 上記の規則に基づいてゲームのセーブデータを探します。
- JSONを逆シリアル化して単純なシリアル化オブジェクトに戻します。
- シリアル化オブジェクトを確認して、より複雑なゲーム状態を再現します。
- 新しく水和したゲーム状態を使用してゲームを再開します。
[編集:いくつかの追加リンクと簡単なコードサンプルを追加]
これは非常に優れたオープンソースのjsonライブラリです:http://json.codeplex.com/
// somehow convert your game state into a serializable object graph
var saveState = gameState.Save();
// use json.net to convert that to a string
string json = JsonConvert.SerializeObject(saveState, Formatting.Indented);
// save that string to the file system using whatever is available to you.
fileSystemService.WriteAllText("Saves\game1.json", json);