2017-07-17 4 views
0

商品のアレンジメントを作成しようとした際に問題が発生しました。私はTerrainと呼ばれる項目で構成されたボード上で行われるゲームを作成しています。ボード上の各地形は、それ自身に固有のプロパティと関係を持つ独自のアイテムです。地形生成の重要な部分は、各空間が隣接するタイルを参照できるようにすることです。また、そのような実装の最終的な必要性も後で予測していますので、今私はそれを克服したいと思います。リレーショナルアウェアネス

私が直面している主な問題は、マトリックスの各メンバーがお互いに気づき、全体としてどのように関係しているか分かりません。それがどのように機能するかについてのいくつかの洞察を得るために、デザインは二重になっています。

最初に、すべてのメンバーを含む一般的なコレクションがあります。各メンバーは、生データとコレクション内のアイテムの位置の両方を含む独自の汎用アイテムに含まれています。

最も重要な基準は、大きなコレクションを検索してオブジェクトを関連付けることができないということです。私はそれぞれのアイテムに関連するすべてのネイバーへの参照が含まれている必要があり、そのリファレンスからそのネイバーを編集できるようにし、それらのアイテムの更新ですべての再帰を避ける必要があります。

私は基本的に1対1のリレーションシップとほぼ同じものをデータベースから作成しようとしています。そのため、1つの場所にしか存在しませんが、データベースの類推のレコードのような同僚からアクセスできます。

答えて

0

私はあなたの質問を正しく理解していれば、各タイルはマトリックス内の隣接するタイルを認識し、参照できる必要があります。頭に浮かぶ最初の解決策はポインタを使用していますが、これはC#なので安全な方法に固執する方がよいでしょう。

この問題を解決するには、タイプのコンストラクタに配列Terrainの引数と、その配列内の特定の要素の位置を示す整数の引数を含めることです。

これを行うと、Terrainは、配列から隣接するアイテムをその独自の位置から取得できます。右のアイテムはもちろん+ 1の位置になり、左の要素はその位置-1になります。 上記の要素は、位置からゲームボードの幅を差し引いたものになります。下の要素は、位置とゲームボードの幅の合計。

+0

これは有効な解決策ではありませんか?コレクションを検索する必要はないと言いましたが、あなたがこれを意味するのかどうかはわかりません。 –

+0

いいえ、これは残念ながら有効な解決策ではありません。なぜなら、マトリックスの各メンバーは独自の他のアイテムとの相対的な位置は関係なく、手動で参照する必要があるためです。 あなたが記述していることは、各タイルがすべての他のタイルを含んでいない限り、問題の特定の側面を解決しませんが、それぞれの更新は再帰的な更新の問題につながります。それを含んでいないすべてのセットのセットのようなその子供。自身をインクルードしないように更新するたびに、それ自身をインクルードするように更新する必要があり、スタックは決して解決しません – Azeranth