1

だから私は現在、ほとんどの人が「ブレイクアウト」から始める単純なゲーム プロジェクトに取り組んでいます。私の目標の一部は、現在のゲーム状態のゲームセーブを可能な限り簡単な方法にすることです。例えば。

==シナリオ==

次に、ゲームに負けた、または疲れたために寝たいとしましょう。そのため、パドル、ボール、レンガの同じ位置に戻る場所にゲーム状態をリロードしたいとします。唯一の問題は、複数のフォームがあり、この特定のフォームを特定の状態で保存したいだけです。

私はどのようにアプローチするかについてのアイデアを持っています(パドル、ボール、レンガの位置とその正確な時間を保存する方法を見つけるでしょう)が、それをどのように実行するかについての手がかりがありません. この偉業を達成するにはどうすればよいですか?

4

2 に答える 2

6

これは非常に複雑な問題になる可能性がありますが、あなたの場合、ゲームがより複雑になるにつれて、単純なものから始めて、そこから始めることをお勧めします。基本的に、確率はシリアル化として知られています。または、後でメモリに読み戻すことができるように、アプリケーションのメモリをディスクまたはデータベースに書き込みます。

これを行うには、オブジェクトをXMLやJSON、またはその他のバイナリファイル形式に変換するなど、多くの手法があります。たとえば、ビットマップファイルは、メモリ内の一部の画像構造のシリアル化された形式です。

C#(XNA?)以外のゲームを作成するために使用しているテクノロジはよくわかりませんが、基本的には、環境で使用できるファイルシステムAPIを使用して、シリアル化されたオブジェクトをそこに書き込みたいと考えています。あなたの質問に基づいて、これを容易にするためにあなたのゲームのいくつかを再設計する必要があるかもしれません。一般に、ゲームの状態を「信頼できる唯一の情報源」で表現することをお勧めしますが、そうでない場合でも、おそらくそれを理解することができます。

だからここに私が取るステップの大まかな概要があります...

シリアル化

  1. ゲームの状態を取得し、より単純でシリアル化可能なオブジェクトを出力するルーチンを作成します。
    • これらの単純なオブジェクトには、ほとんどの場合、機能のないすべてのパブリックゲッター/セッタープロパティがあります。
    • 後でゲームの状態を再作成するために必要な最小限の情報のみを書き出すようにしてください。
    • たとえば、チェスがゲームの状態をどのようにシリアル化するかをご覧ください:チェス表記
  2. それらのオブジェクトをJSONにシリアル化します(簡単で柔軟性があるため)
  3. そのjsonをディスクに書き込みます。
    • ここではおそらくコンベンションベースのアプローチを使用します。
    • 「Saves\game1.json」などは、最初のゲームスロットの状態です。
    • 正しい名前のファイルの存在に基づいて、保存されたゲームを推測するだけです。

デシリアライズ

  1. 上記の規則に基づいてゲームのセーブデータを探します。
  2. JSONを逆シリアル化して単純なシリアル化オブジェクトに戻します。
  3. シリアル化オブジェクトを確認して、より複雑なゲーム状態を再現します。
    • ビジターパターンの使用を検討してください。
  4. 新しく水和したゲーム状態を使用してゲームを再開します。

[編集:いくつかの追加リンクと簡単なコードサンプルを追加]

これは非常に優れたオープンソースの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);
于 2012-05-16T19:37:20.220 に答える
1

単純に XML ファイルに保存し、起動時に XML ファイルを読み取ることができます。

于 2012-05-16T19:19:52.260 に答える