-1

私はチェッカーのようなボードベースのゲームに取り組んでいます。ボード上のすべてのタイルには特定のプロパティがあります。ボードのステータスを変更する前に、その状態を保存し、それを使用して最後の移動を元に戻したいと考えています。ステータスが変化すると、すべてのオブジェクトが破棄され、新しいオブジェクトが作成されます。デストラクタを呼び出すだけでなく、これらのポインタを保持する方法はありますか?

4

4 に答える 4

3

これは、ポインター/実装の問題というよりも、設計上の問題です。元に戻す/やり直しを考える 1 つの方法は、タスクごとに 1 つずつ、2 つのスタックです。

移動するたびに、構成/ゲームの状態、オブジェクトなどを1つの要素として元に戻すスタックにプッシュします。元に戻すを押すと、そのスタックの要素をポップし、ゲームに適用し、この要素をスタックをやり直します。新しい移動が完了すると、やり直しスタックがクリアされます

デストラクタ、ポインタ、またはポインタなしを呼び出した後は、オブジェクトを使用できません。オブジェクトをスタックにプッシュする前に全体としてコピーするか、オブジェクトへのポインタを使用することができます。

より多くの可能性を提供するため、共有ポインターの使用に興味があるかもしれません

メモリを効果的に使用したい場合、ゲーム全体の状態を保存する以外の別のアプローチは、ゲーム全体のスナップショットではなくゲーム内の変更を保存することですが、これは通常より多くの作業を必要としますが、賢い方法です。

于 2012-11-07T12:54:43.310 に答える
1

この方法でポインタを保持したくありません。それらが削除された後にこれらのポインターを介してデータにアクセスしようとすると、アクセス違反が発生します。それらが削除されると、それらが指すメモリは、それらのポインターを介してアクセスされるべきではありません。

これらのポインターのコピーを取得すると、それらも同じアドレスを持つため、取得したコピーを介してそのメモリにアクセスすると、同じことが起こります。別のアプローチを検討する必要があります

于 2012-11-07T12:51:22.580 に答える
0

リンクされたリストなどと同じタイル オブジェクトで UNDO リストへのリンクを使用しないのはなぜですか。ユーザーが状態を元に戻すときに、このリストのデータとタイトルのデータを操作します。

于 2012-11-07T13:11:07.890 に答える
0

ゲームの状態を保持するには、次の 2 つの方法があります。

  • ゲームの状態を構成するすべてのオブジェクトをメモリまたはストレージにシリアル化することで、効果的に状態を保存し、それに戻ることができます。
  • あるゲーム状態から別のゲーム状態への変更のみを保持します。

ポインターの使用が設計の中心になるとは思いません。古いポインターを保持する必要はありません。私の知る限り、ポインターはまったく必要ありません。オブジェクト自体の古い状態を保存するか、一連の変更を保存します。この場合、私は後者を使用します。

于 2012-11-07T12:53:13.797 に答える