これは設計上の質問であり、可能な限り明確に組み立てるつもりですが、私が直面している問題を何と呼ぶのかよくわかりません。
私はビデオゲームに取り組んでおり、ゲームのセットアップとプレイには複数のステップが含まれます。すべてをきれいに保つために、これらの各ステップをある種のオブジェクトでラップしたかったのです。
ゲームの流れをセッション、ラウンド、スポーンに分割することにしました。ゲームのセッションは最高のスコープレベルであり、どのプレーヤーがアクティブであるかを(参加画面を介して)構成してから、ラウンドを開始します。1つのセッション内で複数のラウンドをプレイでき、それらの各ラウンドはグローバルセッションデータを継承します。同様に、ラウンドとセッションの両方からデータを継承して、各ラウンドで複数回死んでリスポーンすることができます。
だから、ある種の無料を想像してみてください。
- セッション1
- セッション2
- ラウンドA
- ラウンドB
- スポーン1
- スポーン2
- ラウンドC
- セッション3
スポーン1は、ラウンドBとセッション2のデータにアクセスできます。
これはかなりきれいなデザインのようです。セッション全体のデータを1つの場所に保持し、セッション全体を通じてそのオブジェクトを存続させ、各ラウンドが分岐してこのデータを継承することができます。
今興味深い問題。前に言ったように、セッションにはプレーヤーのコレクションが含まれています(ゲームに参加し、セッション全体でアクティブなプレーヤー)。ラウンドはまた、各プレーヤーに関するいくつかの追加データを保持する必要がありますが、そのデータはラウンド内にのみ存在します(たとえば、最後のスポーンポイント、または現在のスコア)。同じパターンに従って、このラウンド固有のデータを保持する別のクラスを作成したかったのです。
これが故障するのは、コレクションを維持するときです。セッションにはプレーヤーに関する信頼できるリストが含まれ、各ラウンドは追加のアドオンデータを提供するため、ラウンドはSessionPlayerのメンバーを更新する必要がありますか?ラウンドには、ラウンドレベルのデータとセッションレベルのデータへのポインタを含む独自のプレーヤーのリストが必要ですか?IDが一致する個別のコレクションを含める必要がありますか?
これは巧妙なデザインパターンで解決できるように思えますが、私はそれを見つけることができませんでした。
要約すると、コレクションを含むオブジェクトを一時的にラップし、そのコレクションのすべての要素もラップする方法は?
私はそれをきちんと説明したと思います。助けてくれてありがとう!